Spring AOP(3)注册组件AnnotationAwareAspectJAutoProxyCreator

注册组件AnnotationAwareAspectJAutoProxyCreator到BeanFactory中;

二、我们需要在相关父类中找到与BeanPostProcessor接口、BeanFactoryAware接口两个接口有关的方法,并打上断点,相关的方法如下:

图2

 执行流程:(根据Debugger Frames一步步看运行过程)

(1)、传入配置类,创建IOC容器;

 refresh()总结而言就是初始化容器(这里我们重点就看BeanPostProcessor(AnnotationAwareAspectJAutoProxyCreator)这个bean的创建过程),那它是怎么调用的呢?看其内部的方法:registerBeanPostProcessors(beanFactory)

 继续追溯找到方法:registerBeanPostProcessors()详解:

步骤1的参数详情:

 重点来看internalAutoProxyCreator的注册过程:

由它的继承关系图可知,它的父类是继承了Ordered的接口,所以重点看第二步注册代码:

传入beanName和BeanPostProcessor类型查找Bean;

 

 

调getSingleton()、getObject()获取单实例的Bean, 因为容器还没有这个bean,所以获取不到,

这时就会创建bean调用createBean();(这个机制保证了spring的单实例bean只被创建一次);

进入AbstractAutowireCapableBeanFactory.doCreateBean()中;

 然后进入AbstractAutowireCapableBeanFactory.initializeBean(){} 如图所示:

initializeBean()内部的执行过程:invokeAwareMethods(beanName, bean){setBeanFactory()>initBeanFactory}--》applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName)---》invokeInitMethods(beanName, wrappedBean, mbd);---》applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);

 

 调用的是:AbstractAdvisorAutoProxyCreator类中的setBeanFactory(BeanFactory beanFactory)方法;

 调用的是:AnnotationAwareAspectJAutoProxyCreator类中的initBeanFactory(ConfigurableListableBeanFactory beanFactory)方法,相当于将上一步创建的ReflectiveAspectJAdvisorFactory和beanFactory封装了一下。

 

 这时,BeanFactory.getBean()已返回Bean,接下来就是注册Bean;

 

注册bean的方法:

至此, AnnotationAwareAspectJAutoProxyCreator后置处理器已注册完成;

{IOC容器在创建对象的时候会注册一些 后置处理器;在AOP中就是创建了一个AnnotationAwareAspectJAutoProxyCreator的后置处理器;}

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值