AOP 是如何工作的

来自姬鸿昌的知识库
跳到导航 跳到搜索

AOP 是什么

AOP 就是 Aspect Oriented Programing,面向切面编程,是一种非常适合在无需修改业务代码的前提下,

对某个或某些业务增加统一的功能,比如日志记录、权限控制、事务管理等,能很好的使得代码解耦,提高开发效率。

AOP 中的核心概念

Advice

Advice 可以理解为通知、建议,在 Spring 中通过定义 Advice 来定义代理逻辑。

Pointcut

Pointcut 是切点,表示 Advice 对应的代理逻辑应用在哪个类、哪个方法上。

Advisor

Advisor 等于 Advice+Pointcut,表示代理逻辑和切点的一个整体,程序员可以通过定义或封装一个 Advisor,来定义切点和代理逻辑。

Weaving

weaving 表示织入,将 Advice 代理逻辑在源代码级别嵌入到切点的过程,就叫做织入。

Target

Target 表示目标对象,也就是被代理对象,在 AOP 生成的代理对象中会持有目标对象。

Join Point

Join Point 表示连接点,在 Spring AOP 中,就是方法的执行点。

AOP 的工作原理

AOP 是发生在 Bean 的生命周期过程中的:

1、Spring 生成 bean 对象时,先实例化出来一个对象,也就是 target 对象

2、再对 target 对象进行属性填充

3、在初始化后步骤中,会判断 target 对象有没有对应的切面

4、如果有切面,就表示当前 target 对象需要进行 AOP

5、通过 CGlib 或 JDK 动态代理机制生成一个代理对象,作为最终的 bean 对象

6、代理对象中有一个 target 属性指向了 target 对象