话不多说直接上代码:
注解类:
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyLog { }
代理类:
@Component @Aspect public class LogAspects { @Pointcut("@annotation(com.example.demo.aop.MyLog)") public void pointCut() { } @Before("pointCut()") public void beforeMethod() { System.out.println("before方法执行中。。。。。。"); } @After("pointCut()") public void afterMethod() { System.out.println("after方法执行中。。。。。。"); } @AfterReturning("pointCut()") public void afterReturningMethod() { System.out.println("afterReturning方法执行中。。。。。。"); } @AfterThrowing("pointCut()") public void afterThrowingMethod() { System.out.println("afterThrowing方法执行中。。。。。。"); } @Around("pointCut()") public Object aroundThrowingMethod(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { System.out.println("Around之前的方法执行中。。。。。。"); Object o = proceedingJoinPoint.proceed(); System.err.println(o); System.out.println("Around之后的方法执行中。。。。。。"); return o; } }
controller层:
@RestController public class LogTestController { @MyLog @GetMapping("/logTest") public String logTest(@RequestParam("id") int id, @RequestParam("name") String name) { System.out.println("id:" + id + " " + "name:" + name); return id+name; } }
说白了就是那个方法上标注了MyLog注解就代理谁