首先需要知道一个大致实现
● 这个注入过程肯定是在 BeanPostProcessor 中实现的
●spring 是在 beanFactory.getBean 进行 bean 实例化的,即懒加载
● 根据第二条,也就是说在 getBean 的时候才会去调用所有 BeanPostProcessor
● 第二篇文章说到,BeanFactory 的 refresh 过程只是注册 BeanPostProcessor,真正执行在 getBean 方法中
MergedBeanDefinitionPostProcessor 也是一种 BeanPostProcessor 它重新弄了个一个生命周期函数,替代了 BeanPostProcessor 默认的生命周期函数,这么看吧,我贴一小段源码for (BeanPostProcessor bp : getBeanPostProcessors()) {
if (bp instanceof MergedBeanDefinitionPostProcessor) {
MergedBeanDefinitionPostProcessor bdp = (MergedBeanDefinitionPostProcessor) bp;
bdp.postProcessMergedBeanDefinition(mbd, beanType, beanName);
}
}
它允许你在非 BeanFactoryProcess 中去修改 Bean 定义