文章目录
参考资料
- 视频 - AOP原理-@EnableAspectJAutoProxy
- 笔记截图:
源码分析
1、注解驱动 @EnableAspectJAutoProxy
上篇文章讲到开启基于注解的 AOP 模式,需要在配置类上加上注解@EnableAspectJAutoProxy
。
查看源码:
@Import(AspectJAutoProxyRegistrar.class)
:
给容器中导入 AspectJAutoProxyRegistrar
2、AspectJ 自动代理注册器 AspectJAutoProxyRegistrar.class
Debug 运行测试类,查看 AspectJAutoProxyRegistrar.class
。
AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry);
断点到 AopConfigUtils#registerOrEscalateApcAsRequired
3、注册 Bean 定义信息 AopConfigUtils#registerOrEscalateApcAsRequired
判断 registry
是否包含 org.springframework.aop.config.internalAutoProxyCreator
因为是第一次注册,所以不包含。
新建一个 Bean 定义信息 beanDefinition
,并将参数 cls 即 AnnotationAwareAspectJAutoProxyCreator
注册到 BeanDefinitionRegistry
中。
小结
前三步说明注解 @EnableAspectJAutoProxy
向容器中注册了 AnnotationAwareAspectJAutoProxyCreator
,即 internalAutoProxyCreator
,因此需要了解该组件的功能作用。
内容预告
AnnotationAwareAspectJAutoProxyCreator
继承关系图
父类 AbstractAutoProxyCreator
实现了接口 SmartInstantiationAwareBeanPostProcessor
,由关键词 BeanPostProcessor
可知这是一个 Bean 后置处理器,因此重点关注关注后置处理器(在 Bean 初始化完成前后做事情);同时还实现了接口 BeanFactoryAware
,也需要关注自动装配 BeanFactory
。