AOP概念
AOP是一种设计思想,是软件设计领域中的面向切面编程,他是面向对象编程(AOP)的一种补充和完善。通过预编译方式和运行期动态代理方式,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。
AOP应用原理
Spring AOP底层基于代理机制实现功能扩展:
1.假如目标对象(被代理对象)实现接口,则底层可以采用JDK动态代理机制为目标创建代理对象(目标类和代理类会实现共同接口)。
2.假如目标对象(被代理对象)没有实现接口,则底层采用CGLIB代理机制为目标对象创建代理对象(默认创建的代理类会继承目标对象类型)。
注:Spring boot2.x中AOP现在默认使用的CGLIB代理,假如需要使用JDK动态代理,需要在配置文件中进行配置:spring.aop.proxy-target-class=false
AOP相关术语分析
1.切面(aspect):横切面对象,一般为一个具体类对象(可以借助@Aspect声明)
2.通知(Advice):在切面的某个特定连接点上执行的动作(拓展功能),例如around,before,after等。
3.拦截点(joinpoint):程序执行过程中某个特定的点,一般指被拦截到的方法。
4.切入点(pointcut):对多个连接点(Joinpoint)一种定义,一般可以理解为多个连接点的集合。
AOP实践案例
项目创建及配置
创建maven项目或在已有项目基础上添加AOP依赖:
<dependency>
<groupId>