本文主要讲解利用SpringBoot的自定义注解来实现AOP思想。
在开始所有的操作之前,需要导入aop坐标:
1 | <dependency> |
如何自定义注解?
实际上注解本质上是一个@interface类,在这个类前面可以通过一些注解来限制这个注解类的使用范围,比如@Target、@Retention等等,有关这方面的文章用搜索引擎可以搜出一大把。
1 | (ElementType.METHOD) |
自定义注解AOP的切面
切面是有一系列切点与增强组成,所以在@Aspect所注解的类中,需要配置切点与增强,
切点
使用@Pointcut注解,然并通过@annontation、execution()等方法缺陷切点的范围;
这里因为是使用自定义注解的形式来指定切点,所以是使用@annontation的形式,前提是需要在被增强的方法或者类前面添加自定义的注解。
1 | /** |
1 | /** |
增强
在AOP中的增强主要是以下几种:
- Before,在被增强的代码执行之前执行;
- After,在被增强的代码执行之后执行
- AfterReturning,在被增强的代码正确返回后执行,通过
returning可以获取返回值; - Around,在被增强的代码执行前和执行后都会执行,主要是通过
ProceedingJoinPoint.process()方法来调用被增强代码; - AgterThrowing,在被增强代码出现异常后执行,可以捕捉到异常的信息,可以通过
throwing来获取异常对象。
1 |
|
AOP的运行顺序
在面向切面编程的过程中AOP的执行顺序是:Around-before>>Befer>>主程序执行>>Around-after>>After>>AfterReturning>>End。

如果是AfterThrowing则则执行顺序是:Around-before>>Befer>>主程序执行>>AfterThrowing>>End。

重点
Around增强执行后的返回值一定要返回,否则返回值是null;- 如果既有
Around又有AfterThrowing两个增强,那么Around增强里面执行主程序的异常不能进行try catch,否则,AfterThrowing将无法正常捕获异常。