您的位置:首页 > 编程语言 > Java开发

Spring注解驱动开发-part6基于注解的AOP初始化

2020-06-29 04:42 519 查看

如何研究AOP原理?

  1. 看容器中注册了什么组件?
  2. 这个组件什么时候工作?
  3. 这个组件的功能是什么?

@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的最终注册

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: