如何研究AOP原理?
- 看容器中注册了什么组件?
- 这个组件什么时候工作?
- 这个组件的功能是什么?
@EnableAspectJAutoProxy注解初步
- 功能:开启基于AspectJ的自动代理
该注解接口导入了AspectJAutoProxyRegistrar.class

AspectJAutoProxyRegistrar重载了imoportBeanDefnitionRegistrar中的注册bean方法

AnnotationAwareAspectJAutoProxyCreator
尝试升级已有的Bean或注册新的Bean,类型为:AnnotationAwareAspectJAutoProxyCreator
该Bean 的名称为:internalAutoProxyCreator
internalAutoProxyCreator

public class AnnotationAwareAspectJAutoProxyCreator extends AspectJAwareAdvisorAutoProxyCreator {

public class AspectJAwareAdvisorAutoProxyCreator extends AbstractAdvisorAutoProxyCreator {

public abstract class AbstractAdvisorAutoProxyCreator extends AbstractAutoProxyCreator {

注意这里的后置处理接口,以及BeanFactoryAware会设置BeanFactory
public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport
implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware {

AbstractAutoProxyCreator有:
setBeanFactory,
postProcessAfterInitialization,
postProcessBeforeInitialization。
AbstractAdvisorAutoProxyCreator有:
重写setBeanFactory,其中调用initBeanFactory
AspectJAwareAdvisorAutoProxyCreator有:
略
AnnotationAwareAspectJAutoProxyCreator有:
重写initBeanFactory
断点设置:

Debug调试到断点:

流程:
this();//无参构造容器
register(componentClasses; //注册组件类
refresh(); //刷新容器,容器中的所有Bean创建出来

注册所有后置处理器,用于拦截bean 的创建
获取ioc容器中已经定义了的需要创建对象的所有BeanPostProcessor
添加其他BeanPostProcessor
优先注册实现了PriorityOrdered接口的BeanPostProcessor
然后注册实现了Ordered接口的BeanPostProcessor
最后注册常规的BeanPostProcessor

创建并获得单实例
第一次get的时候必定需要create,在参数singletonFactory处,使用了匿名类JDK8的最新写法,直接用lambda表达式表示实现了对应接口的匿名类。
创建好之后,在doCreateBean中填充(Populate)Bean
初始化Bean
是否实现了一些Aware接口?
如果是则调用相关方法,注意这里用的if没有else判断!
这里就是Aware接口的一些赋值处理。
接下来在初始化方法invokeInitMethods的前后分别调用:
applyBeanPostProcessorBeforeInitialization,applyBeanPostProcessorAfterInitialization
applyBeanPostProcessorBeforeInitialization 干了啥?
调用BeanPostProcessor接口对应功能!
setBeanFactory,完成AbstractAdvisorAutoProxyCreator的最终注册

本文详细探讨了AOP(面向切面编程)在Spring框架中的应用原理,特别是@EnableAspectJAutoProxy注解的作用机制,包括如何通过该注解开启AspectJ自动代理,以及AnnotationAwareAspectJAutoProxyCreator类在Bean创建过程中的角色。文章还剖析了AbstractAutoProxyCreator类及其子类在Bean后置处理中的具体实现。
662

被折叠的 条评论
为什么被折叠?



