老生谈spring(十四):BeanFactoryPostProcessor
序言:前面已经详细地讲解了obtainFreshBeanFactory方法,这个方法把xml文件解析为BeanDefinition然后逐个注册到beanDefinitionMap容器。接下来给大家讲解spring bean的创建过程,虽然这个过程非常长,也会分很多章节进行逐步讲解,但还是会尽量地把这个过程清晰完整地展示给大家。
1、首先给大家理清一下spring启动的整个流程思路(refresh):
1)obtainFreshBeanFactory创建DefaultListableBeanFactory容器
2)prepareBeanFactory会向容器中注册spring内部的postProcessBean以及环境变量
3)postProcessBeanFactory提供一个方法供子类对DefaultListableBeanFactory容器进行修改
4)invokeBeanFactoryPostProcessors则是以BeanFactoryPostProcessor的方式对DefaultListableBeanFactory进行修改扩展
5)registerBeanPostProcessors则是注册BeanPostProcessor
6)initApplicationEventMulticaster用于发布事件
7)registerListeners注册事件监听器
8)finishBeanFactoryInitialization真正对bean进行实例化创建
9)finishRefresh启动后的一些收尾工作,如清理一些缓存、初始化lifecycle processor以及发布启动完成的事件
2、本节简单给大家介绍怎么通过BeanFactoryPostProcessor对spring容器DefaultListableBeanFactory进行修改扩展。首先创建一个B类,这个类放在spring默认不会扫描的位置:
public