以前项目中未用过aop,故一直对aop不了解,近期看了看,大致了解了下,在上代码前首先需要了解aop一些基本概念。
一、AOP基本概念
-
: 1、Aspect(切面):说白了就是一个class,里面定义切入点和通知
-
2、JointPoint(连接点):接入点,例如方法执行、类初始化、异常处理。 在Spring AOP中,接入点始终表示方法执行。
-
3、Advice(增强):AOP在特定的切入点上执行的增强处理,主要包括下面几种:before,after,afterReturning,afterThrowing,around,执行顺序为:around->before->around->after->afterReturning 或 afterThrowing
-
4、Pointcut(切入点):用来匹配特定的接入点,增强会与切点表达式产生关联,并运行在任何切点匹配到的接入点上。说白点也就是定义触发时机。
-
5、AOP代理:为了实现切面功能一个对象会被AOP框架创建出来。在Spring框架中AOP代理的默认方式是:有接口,就使用基于接口的JDK动态代理,否则使用基于类的CGLIB动态代理。但是我们可以通过设置proxy-target-class=“true”,完全使用CGLIB动态代理。
二、模拟aspect advice的执行过程
-
1、手动配置
-
首先创建一个普通class,里面包含advice的几种增强处理。如图:
class创建完毕后,开始配置spring配置文件,如图:
下来测试:
运行结果:
请忽略上图中**null:0 这个,是个人实现类中的console信息
2、注解方式
-
与手动配置区别在于切面类和配置,先看切面类,需要用@Aspect标识,每个增强也是用注解标注:
配置文件:
运行结果就不展示了,和手动配置一致
通过上面执行结果可以看出Advice(增强)的运行过程:
此外需要注意afterReturning中指定的返回值,其实接受的是arround中的返回值。如果需要对返回结果进行修改,需要在arround中进行操作。