1. AOP
2. 原理
对于这类的源码分析,主要就是看往容器中注入了什么组件和组件什么时候工作
@EnableAspectJAutoProxy
注解
Aop
要起作用关键的一点在于配置@EnableAspectJAutoProxy
注解,所有先来分析这个注解
点进这个注解,可以看到导入了AspectJAutoProxyRegistrar
组件
AspectJAutoProxyRegistrar
实现了ImportBeanDefinitionRegistrar
接口,在spring注解开发中提到过,这个接口是为了自定义注入bean
,那是注入了什么呢?
debug跟进源码看,实际上注册的是一个AnnotationAwareAspectJAutoProxyCreator
(跟进过程不写了)
AnnotationAwareAspectJAutoProxyCreator
是注解方式的自动代理创建器
看看他的层次结构
主要关注后置处理器SmartInstantiationAwareBeanPostProcessor
,他在bean初始化前后做事情
还要关注BeanFactoryAware
自动装配bean
为和SmartInstantiationAwareBeanPostProcessor
和BeanFactoryAware
有关的方法打上断点
//AbstractAutoProxyCreator
//和BeanFactoryAware有关
AbstractAutoProxyCreator.setBeanFactory
//和后置处理器有关
AbstractAutoProxyCreator.postProcessBeforeInstantiation
AbstractAutoProxyCreator.postProcessAfterInitialization
//AbstractAdvisorAutoProxyCreator
//重写了setBeanFactory
setBeanFactory-->initBeanFactory
//AnnotationAwareAspectJAutoProxyCreator
initBeanFactory
看不懂了,等我先去看看Spring技术内幕再说吧