1、 AnnotationAwareAspectJAutoProxyCreator繼承關係
AnnotationAwareAspectJAutoProxyCreator:
AnnotationAwareAspectJAutoProxyCreator
->AspectJAwareAdvisorAutoProxyCreator
->AbstractAdvisorAutoProxyCreator
->AbstractAutoProxyCreator
implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware
關注後置處理器(在bean初始化完成前後做事情)、自動裝配BeanFactory
2、創建和註冊AnnotationAwareAspectJAutoProxyCreator的過程
流程:
* 1)、傳入配置類,創建ioc容器
* 2)、註冊配置類,調用refresh()刷新容器;
* 3)、registerBeanPostProcessors(beanFactory);註冊bean的後置處理器來方便攔截bean的創建;
* 1)、先獲取ioc容器已經定義了的需要創建對象的所有BeanPostProcessor
* 2)、給容器中加別的BeanPostProcessor
* 3)、優先註冊實現了PriorityOrdered接口的BeanPostProcessor;
* 4)、再給容器中註冊實現了Ordered接口的BeanPostProcessor;
* 5)、註冊沒實現優先級接口的BeanPostProcessor;
* 6)、註冊BeanPostProcessor,實際上就是創建BeanPostProcessor對象,保存在容器中;
* 創建internalAutoProxyCreator的BeanPostProcessor【AnnotationAwareAspectJAutoProxyCreator】
* 1)、創建Bean的實例
* 2)、populateBean;給bean的各種屬性賦值
* 3)、initializeBean:初始化bean;
* 1)、invokeAwareMethods():處理Aware接口的方法回調
* 2)、applyBeanPostProcessorsBeforeInitialization():應用後置處理器的postProcessBeforeInitialization()
* 3)、invokeInitMethods();執行自定義的初始化方法
* 4)、applyBeanPostProcessorsAfterInitialization();執行後置處理器的postProcessAfterInitialization();
* 4)、BeanPostProcessor(AnnotationAwareAspectJAutoProxyCreator)創建成功;--》aspectJAdvisorsBuilder
* 7)、把BeanPostProcessor註冊到BeanFactory中;
* beanFactory.addBeanPostProcessor(postProcessor);
3、斷點調試步驟
【AbstractApplicationContext--registerBeanPostProcessors】·
【PostProcessorRegistrationDelegate-registerBeanPostProcessors-getBean】
【AbstractBeanFactory-doGetBean-getSingleton】
【DefaultSingletonBeanRegistry-getSingleton】
【AbstractBeanFactory.doGetBean-doGetBean-createBean 】
【AbstractAutowireCapableBeanFactory.doCreateBean】
【AbstractAutowireCapableBeanFactory-invokeAwareMethods】
Aware接口處理
initializeBean-方法中,在執行完成Aware接口的處理後,BeanNameAware
接口是爲了讓自身Bean
能夠感知到,獲取到自身在Spring容器中的id屬性
【AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization】