BeanFactoryPostProcessor和BeanPostProcessor
1. BeanFactoryPostProcessor调用(见AbstractApplicationContext.invokeBeanFactoryPostProcessors):
>> 创建DefaultListableBeanFactory --> loadBeanDefinitions
1)BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry(编码注册)
2)BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry(配置注册):PriorityOrdered排序 --> Ordered排序 --> Regular无序
3)BeanDefinitionRegistryPostProcessor.postProcessBeanFactory(编码注册)
4)BeanDefinitionRegistryPostProcessor.postProcessBeanFactory(配置注册):PriorityOrdered排序 --> Ordered排序 --> Regular无序
5)BeanFactoryPostProcessor.postProcessBeanFactory(编码注册)
6)BeanFactoryPostProcessor.postProcessBeanFactory(配置注册):PriorityOrdered排序 --> Ordered排序 --> Regular无序
2. BeanPostProcessor注册(见AbstractApplicationContext.registerBeanPostProcessors):
1)BeanPostProcessor:PriorityOrdered排序 --> Ordered排序 --> Regular无序
2)MergedBeanDefinitionPostProcessor:PriorityOrdered排序 --> Ordered排序 --> Regular无序
3. BeanPostProcessor调用(见DefaultListableBeanFactory.createBean):
1)InstantiationAwareBeanPostProcessor.applyBeanPostProcessorsBeforeInstantiation(resolveBeforeInstantiation)
>> return Bean ( == null ) --> 7)
>> return Bean ( != null ) --> createBeanInstance(默认:CglibSubclassingInstantiationStrategy.instantiate)
2)MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition
>> populateBean
3)InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation
>> return false --> 5)
>> return true --> autowireByName / autowireByType
4)InstantiationAwareBeanPostProcessor.postProcessPropertyValues
>> return PropertyValues ( == null )
>> return PropertyValues ( != null ) --> applyPropertyValues
5)initializeBean --> invokeAwareMethods
6)BeanPostProcessor.postProcessBeforeInitialization(@postConstruct)
>> invokeInitMethod:InitializingBean.afterPropertiesSet --> invokeCustomInitMethod(init-method )
7)BeanPostProcessor.postProcessAfterInitialization
>> 单实例(容器初始化完成):SmartInitializingSingleton.afterSingletonsInstantiated