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