014-spring-aop的原理
1、aop标签找到
2、config
3、parse
这个地方非常重要。
先判断有没有
没有就给 beanDefinitionMap中注入对象
org.springframework.aop.config.internalAutoProxyCreator 是一个beanPostProcessor
org.springframework.aop.config.internalAutoProxyCreator //是一个beanPostProcessor
org.springframework.aop.config.internalAutoProxyCreator //是一个beanPostProcessor
非常重要
非常重要
非常重要
非常重要
//AspectJAwareAdvisorAutoProxyCreator 是个啥?
//从图中看到是一个 BeanPostProcessor
//BeanPostProcessor 就有 方法 postProcessBeforeInitialization
// postProcessAfterInitialization
//后面在 AbstractAutoProxyCreator 找到了方法 postProcessAfterInitialization
public class AspectJAwareAdvisorAutoProxyCreator extends AbstractAdvisorAutoProxyCreator {
public abstract class AbstractAdvisorAutoProxyCreator extends AbstractAutoProxyCreator {
public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware {
//综上:
AspectJAwareAdvisorAutoProxyCreator extends AbstractAdvisorAutoProxyCreator extends AbstractAutoProxyCreator
AbstractAutoProxyCreator类中重写了方法 postProcessAfterInitialization
后续再跟踪代码
最后在这里找到了代理
总结:
1、提供自动代理的Creator
使用注解的话提供:AnnotationAwareAspectJAutoProxyCreator
使用xml的话提供:AspectJAwareAdvisorAutoProxyCreator
2、bean后置处理器
AnnotationAwareAspectJAutoProxyCreator 和 AspectJAwareAdvisorAutoProxyCreator 都是一个BeanPostProcessor
BeanPostProcessor 就有2个方法:postProcessBeforeInitialization 和postProcessAfterInitialization
3、 再通过 BeanPostProcessor#postProcessAfterInitialization的方法来判断是否是需要给该bean做动态代理