三、AOP原理-AnnotationAwareAspectJAutoProxyCreator執行時機

 

AspectJAutoProxyCreator完成BeanFactory初始化工作

 

finishBeanFactoryInitialization(beanFactory);完成BeanFactory初始化工作;創建剩下的單實例bean

 

refresh()->finishBeanFactoryInitialization()->preInstantiateSingletons()->getBean()->doGetBean->getSingleton->createBean()->doCreateBean()->createBeanInstance()->populateBean()->initializeBean()->applyBeanPostProcessorsBeforeInitialization()->invokeInitMethods()->applyBeanPostProcessorsAfterInitialization()
 

SmartInstantiationAwareBeanPostProcessor

org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(Class<?>, String)

org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation(Object, String)

 

BeanPostProcessor

org.springframework.beans.factory.config.BeanPostProcessor.postProcessBeforeInitialization(Object, String) 

org.springframework.beans.factory.config.BeanPostProcessor.postProcessAfterInitialization(Object, String)

完成BeanFactory初始化工作;創建剩下的單實例bean

finishBeanFactoryInitialization(beanFactory);

 

遍歷獲取容器中所有的Bean,依次創建對象getBean(beanName);\

 

先從緩存中獲取當前bean,如果能獲取到,說明bean是之前被創建過的,直接使用,否則再創建

 

希望後置處理器在此能返回一個代理對象;如果能返回代理對象就使用,如果不能就繼續

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation(String, RootBeanDefinition)

 後置處理器先嚐試返回對象

【BeanPostProcessor是在Bean對象創建完成初始化前後調用的】

【InstantiationAwareBeanPostProcessor是在創建Bean實例之前先嚐試用後置處理器返回對象的】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章