Spring原始碼解析(十三)——AOP原理——AnnotationAwareAspectJAutoProxyCreator註冊
* 2、 AnnotationAwareAspectJAutoProxyCreator:
* AnnotationAwareAspectJAutoProxyCreator
* ->AspectJAwareAdvisorAutoProxyCreator
* ->AbstractAdvisorAutoProxyCreator
* ->AbstractAutoProxyCreator
* implements SmartInstantiationAwareBeanPostProcessor, BeanFactoryAware
* 關注後置處理器(在bean初始化完成前後做事情)、自動裝配BeanFactory
*
* AbstractAutoProxyCreator.setBeanFactory()
* AbstractAutoProxyCreator.有後置處理器的邏輯;
*
* AbstractAdvisorAutoProxyCreator.setBeanFactory()-》initBeanFactory()
*
* AnnotationAwareAspectJAutoProxyCreator.initBeanFactory()
* 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); * =======以上是建立和註冊AnnotationAwareAspectJAutoProxyCreator的過程========
* 流程:
* 1)、傳入配置類,建立ioc容器
* 2)、註冊配置類,呼叫refresh()重新整理容器;重新整理容器就是要把容器中的所有bean創建出來
* 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);
* =======以上是建立和註冊AnnotationAwareAspectJAutoProxyCreator的過程========