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實例之前先嚐試用後置處理器返回對象的】