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的九处调用流程图