1、AOP是一种设计思想,是软件设计领域中的面向切面编程

AOP英文全称为Aspect Orient Programming,它是面对对象编程OOP的补充和完善。AOP可以通过预编译方式和运行期动态代理方式,实现在不修改源代码的情况下给程序动态添加额外功能的一种技术。

2、AOP的应用场景分析

AOP基于OCP(开闭原则),在不改变原有系统核心业务代码的基础上动态添加一些扩展功能,例如在项目中的日志处理,事务处理,权限处理,缓存处理等。如下图:
unnamed.png

3、Spring AOP底层基于代理机制(动态方式1. )实现功能扩展

  • 假如目标对象(被代理对象)实现接口,则底层可以采用JDK动态代理机制为目标对象创建代理对象(目标类和代理类会实现共同接口)。
  • 假如目标对象(被代理对象)没有实现接口,则底层可以采用CGLIB代理机制为目标对象创建代理对象(默认创建的代理类会继承目标对象类型)

说明:Spring boot2.x 中AOP现在默认使用的CGLIB代理,假如需要使用JDK动态代理可以在配置文件(applicatiion.properties)中进行如下配置:

spring.aop.proxy-target-class=false

4、Spring 中AOP 相关术语

  • 切面(aspect): 横切面对象,一般为一个具体类对象(可以借助@Aspect声明)。
  • 通知(Advice):在切面的某个特定连接点上执行的动作(扩展功能),例如around,before,after等。
  • 连接点(joinpoint):程序执行过程中某个特定的点,一般指向被拦截到的的方法。
  • 切入点(pointcut):对多个连接点(Joinpoint)一种定义,一般可以理解为多个连接点的集合。

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

毕生所求无它,爱与自由而已