@EnableAspectJAutoProxy解析
@EnableAspectJAutoProxy注解类
从EnableAspectJAutoProxy类可以看到里面有个 @Import注解,这个作用是将AspectJAutoProxyRegistrar类引入由spring容器管理 ,接下来我们来分析AspectJAutoProxyRegistrar的作用
AspectJAutoProxyRegistrar
我们可以看到AspectJAutoProxyRegistrar实现了ImportBeanDefinitionRegistrar接口的registerBeanDefinitions,可以通过这个方法的请求参数BeanDefinitionRegistry对自己自定义的bean进行注册到spring容器中
AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry)
通过上图可以看到调用了AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry)这个方法,我们来通过下图分析,可以看到最终调用了registerOrEscalateApcAsRequired方法,入参为AnnotationAwareAspectJAutoProxyCreator.class
继续进入registerOrEscalateApcAsRequired方法,从下图代码可以看到,先尝试从BeanDefinitionRegistry获取是否需有internalAutoProxyCreator这个bean,如果没有的话,则将前面的入参AnnotationAwareAspectJAutoProxyCreator 注册到BeanDefinitionRegistry中,bean名称为internalAutoProxyCreator
AnnotationAwareAspectJAutoProxyCreator的结构
下面的类结构图可以了解下,我们重点要关注AnnotationAwareAspectJAutoProxyCreator一直往上有实现SmartInstantiationAwareBeanPostProcessor 和 BeanFactoryAware两个接口
SmartInstantiationAwareBeanPostProcessor的结构则如下,最终是继承了BeanPostProcessor
关于BeanPostProcessor和BeanFactoryAware的作用,了解spring源码的人应该都知道它们的作用,下节我们将会概述以下这个两个的作用,并且重点讲述以下AnnotationAwareAspectJAutoProxyCreator的具体作用