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的使用流程实现

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值