1.Spring AOP是什么?
AOP是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程(OOP)的一种补充和完善,它通过预编译方式和运行期动态代理方式,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。
面向对象:静态过程,一个系统有多少个模块,一个模块有哪些对象,对象有哪些属性。
面向切面:动态过程,可以在(运行期代理方式)对象运行时动态织入一些扩展功能或控制对象执行。
2.Spring AOP应用场景
在实际的项目中,我们首要完成核心业务代码的编写,非核心的业务代码通过特定方式切入到系统中,这种特殊的切入方法就要借助Spring AOP 进行实现。
AOP就是基于OCP原则,在不改变原有系统核心业务代码的基础上动态添加一些扩展功能并可以”控制“对象的执行。例如可以基于AOP实现日志管理,事务处理,权限处理,缓存处理等等。
OCP原则:对业务功能的扩展要open,对业务代码的耦合性要尽可能的降低(close),实现高内聚低耦合的效果。
3.Spring AOP底层实现原理
Spring AOP底层基于代理机制实现功能扩展;
- 假如目标对象(被代理对象)实现接口,则底层可以采用JDK动态代理机制为目标对象创建代理对象(目标类和代理类会实现共同接口)。
- 假如目标对象(被代理对象)没有实现接口,则底层可以采用CGLIB代理机制为目标对象创建代理对象(默认创建的代理类会继承目标对象类型)
说明:Spring boot2.x 中AOP现在默认使用的是CGLIB代理,无论目标对象有或者没有实现接口,代理对象都可以被创建。
假如需要使用JDK动态代理机制可以在配置文件(application.properties)中进行如下配置:spring.aop.proxy-target-class=false
4.Sring AOP的相关专业术语分析
- 切面(aspect):横切面对象,一般为一个具体类对象(可以借助@Aspect声明)
- 通知(Advice):在切面的某个特定连接点上执行的动作(扩展功能),例如 环绕通知(around),前置通知(before),后置通知(afterReturning)等
- 连接点(JoinPoint):满足切入点表达式称为连接点
- 切入点(PointCut):具体定位到某一个方法就是切点
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。