什么是AOP
AOP是一种面向切面的编程思想,它是对面向对象(OOP)编程的一种补充和完善。它以通过预编译方式和运行期动态代理方式,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。
AOP和OOP时两种面向不同领域的设计思想,面向对象是一种静态过程,而面向切面则是运行时代理机制,可以理解为一个动态过程。
AOP就是要基于OCP(开闭原则),在不改变原有系统核心业务代码的基础上动态添加一些扩展功能并可以"控制"对象的执行。例如AOP应用于项目中的日志处理,事务处理,权限处理,缓存处理等等。
AOP原理分析
- 假如目标对象(被代理对象)实现了接口,底层可以采用JDK动态代理机制为目标对象创建代理对象(目标类和代理类会实现共同接口)
- 假如目标对象(被代理对象)没有实现接口,底层则采用CGLIB动态代理机制为目标对象创建代理对象
- aop:proxy-target-class: false
//false表示为目标对象基于JDK方式产生代理对象,默认为true为CGLIB动态代理
原理图如下:
Spring AOP相关属于简介
- 切面(aspect): 横切面对象,一般为一个具体类对象(可以借助@Aspect声明)
- 通知(Advice):在切面的某个特定连接点上执行的动作(扩展功能),有Around,Before,After,AfterReturning,AfterThrowing
- 连接点(joinpoint):程序执行过程中某个特定的点,一般指向被拦截到的目标方法。
- 切入点(pointcut):对多个连接点(Joinpoint)一种定义,一般可以理解为多个连接点的集合
Spring AOP的快速实践
- 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。