1. 程式人生 > >Spring原始碼解析(十三)——AOP原理——AnnotationAwareAspectJAutoProxyCreator註冊

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的過程========