1. resolveBeforeInstantiation()

调用的方法

调用 InstantiationAwareBeanPostProcessor类型中的 postProcessBeforeInstantiation 以及 postProcessAfterInitialization 方法(一般不会执行After方法,在Before方法中会 return null)

具体的调用栈

getBean -> doGetBean -> createBean -> resolveBeforeInstantiation -> 调用 InstantiationAwareBeanPostProcessor 中的方法

(如果在AOP环境下,将会在InstantiationAwareBeanPostProcessor中的postProcessBeforeInstantiation方法中,解析Advisor)

2. determineConstructorsFromBeanPostProcessors()

调用的方法

SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors方法

具体的调用栈

getBean -> doGetBean -> createBean -> doCreateBean -> createBeanInstance -> determineConstructorsFromBeanPostProcessors -> SmartInstantiationAwareBeanPostProcessor#determineCandidateConstructors

3. applyMergedBeanDefinitionPostProcessors

调用的方法

调用 MergedBeanDefinitionPostProcessor 中的postProcessMergedBeanDefinition 方法

具体的调用栈

getBean -> doGetBean -> createBean -> doCreateBean -> applyMergedBeanDefinitionPostProcessors -> MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition

4. getEarlyBeanReference() 获取早期的引用对象

调用 SmartInstantiationAwareBeanPostProcessor 类型的接口中的getEarlyBeanReference方法,获取早期的引用对象,在AOP中,就会调用wrapIfNecessary,生成代理对象(这个等会试试)

具体的调用栈如下

getBean -> doGetBean -> createBean -> doCreateBean -> addSingletonFactory -> getEarlyBeanReference -> SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference

5. populateBean() 属性赋值时

调用 InstantiationAwareBeanPostProcessor类型中的 postProcessAfterInstantiation方法

具体的调用栈如下

getBean -> doGetBean -> createBean -> doCreateBean -> populateBean ->InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation

6. 还是 populateBean方法

调用 InstantiationAwareBeanPostProcessor 类型中的 postProcessPropertyValues方法

具体的调用栈如下

getBean -> doGetBean -> createBean -> doCreateBean -> populateBean ->InstantiationAwareBeanPostProcessor#postProcessPropertyValues

7. initializeBean 初始化Bean时

applyBeanPostProcessorsBeforeInitialization,调用所有后置处理器的 postProcessBeforeInitialization 方法

具体的调用栈如下

getBean -> doGetBean -> createBean -> doCreateBean -> initializeBean -> applyBeanPostProcessorsBeforeInitialization -> BeanPostProcessor#postProcessBeforeInitialization

8. 还是 initializeBean

applyBeanPostProcessorsAfterInitialization,调用所有后置处理器的 postProcessAfterInitialization方法

具体的调用栈如下

getBean -> doGetBean -> createBean -> doCreateBean -> initializeBean -> applyBeanPostProcessorsAfterInitialization -> BeanPostProcessor#postProcessAfterInitialization

9. registerDisposableBeanIfNecessary

DestructionAwareBeanPostProcessor#requiresDestruction方法

具体的调用栈如下

getBean -> doGetBean -> createBean -> doCreateBean ->registerDisposableBeanIfNecessary -> requiresDestruction-> DisposableBeanAdapter._hasApplicableProcessors -> _DestructionAwareBeanPostProcessor#requiresDestruction

附BeanPostProcessor的九处调用流程图
Spring IOC 中BeanPostProcessor的9处调用.png