spring aop 实现流程

AOP的增强处理通过动态代理的方式实现

 

1,AOP标签的处理

首先,aop的标签 aspectj-autoproxy对spring来说处理方式按照自定义标签的方式处理

然后在parse的时候注册AnnotationAwareAspectJAutoProxyCreator的BeanDefinition

2 AOP的代理生成

首先AnnotationAwareAspectJAutoProxyCreator继承了AbstractAutoProxyCreator,

AbstractAutoProxyCreator继承了InstantiationAwareBeanPostProcessor

InstantiationAwareBeanPostProcessor继承了BeanPostProcessor

AbstractAutoProxyCreator中有对实例化和初始化的后处理器方法的实现

postProcessBeforeInstantiation实例化前处理,

postProcessAfterInstantiation实例化后处理,

以及postProcessPropertyValues属性处理

postProcessBeforeInitialization 初始化前处理

postProcessAfterInitialization初始化后处理

 

这五个方法会在bean创建的实例化,初始化过程中被调用

这五个方法中有两处进行了代理处理

一处是在在实例化前处理中,如果在实例化前有自定义TargetSource,则对TargetSource进行代理处理

另一处是在初始化后处理中,实例化前处理获取到TargetSource可以理解为已经初始化了。

所有AOP的代理生成都是在初始化之后

 

3,代理生成可以分解为两步

3.1,获取增强器

3.2,获取代理对象

3.1 获取增强器:先获取所有真强器,返回找出适用当前目标对象的真强器

3.2 获取代理对象:先根据当前目标对象是否有接口,以及是否设置了proxyTargetClass为true。决定适用JdkDynamicAopProxy还是CglibAopProxy。

之后的流程就采用JdkDynamicAopProxy/CglibAopProxy的使用流程实现

 

 

 

你可能感兴趣的:(Java)