From c99bad22cb49e7500ac5e654fc5aeeb22b60d760 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sun, 14 Nov 2021 13:01:38 +0800 Subject: [PATCH] add aop --- build.json | 3 ++- .../sample/common/annotation/Traceable.java | 11 ++++++++++ .../sample/common/aspect/TraceableAspect.java | 20 +++++++++++++++++++ .../web/controller/SampleController.java | 2 ++ 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/hatter/sample/common/annotation/Traceable.java create mode 100644 src/main/java/me/hatter/sample/common/aspect/TraceableAspect.java diff --git a/build.json b/build.json index 3d34023..2ea09ea 100644 --- a/build.json +++ b/build.json @@ -13,7 +13,8 @@ "repo": { "dependencies": [ "me.hatter:commons:3.0", - "org.springframework.boot:spring-boot-starter-web:2.3.12.RELEASE" + "org.springframework.boot:spring-boot-starter-web:2.3.12.RELEASE", + "org.springframework.boot:spring-boot-starter-aop:2.3.12.RELEASE" ], "testDependencies": [ "junit:junit:4.12" diff --git a/src/main/java/me/hatter/sample/common/annotation/Traceable.java b/src/main/java/me/hatter/sample/common/annotation/Traceable.java new file mode 100644 index 0000000..fcf40e2 --- /dev/null +++ b/src/main/java/me/hatter/sample/common/annotation/Traceable.java @@ -0,0 +1,11 @@ +package me.hatter.sample.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Traceable { +} \ No newline at end of file diff --git a/src/main/java/me/hatter/sample/common/aspect/TraceableAspect.java b/src/main/java/me/hatter/sample/common/aspect/TraceableAspect.java new file mode 100644 index 0000000..b402ea9 --- /dev/null +++ b/src/main/java/me/hatter/sample/common/aspect/TraceableAspect.java @@ -0,0 +1,20 @@ +package me.hatter.sample.common.aspect; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; + +@Aspect +@Component +public class TraceableAspect { + + @Around("@annotation(me.hatter.sample.common.annotation.Traceable)") + public Object trace(ProceedingJoinPoint joinPoint) throws Throwable { + System.out.println("[TraceableAspect] " + joinPoint); + Object result = joinPoint.proceed(); + System.out.println("[TraceableAspect] " + result); + return result; + } + +} diff --git a/src/main/java/me/hatter/sample/web/controller/SampleController.java b/src/main/java/me/hatter/sample/web/controller/SampleController.java index f10b16a..423fff9 100644 --- a/src/main/java/me/hatter/sample/web/controller/SampleController.java +++ b/src/main/java/me/hatter/sample/web/controller/SampleController.java @@ -3,6 +3,7 @@ package me.hatter.sample.web.controller; import me.hatter.sample.common.CustomConfiguration; import me.hatter.sample.common.annotation.Permission; import me.hatter.sample.common.annotation.SystemTime; +import me.hatter.sample.common.annotation.Traceable; import me.hatter.sample.common.session.CustomSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -40,6 +41,7 @@ public class SampleController { return "Hello: " + id; } + @Traceable @Permission @GetMapping("/custom-object") public String customObject() {