文章目录
- 01 prepareRefresh
- 02 obtainFreshBeanFactory
- 03 prepareBeanFactory
- 04 postProcessBeanFactory
- 05 invokeBeanFactoryPostProcessors
- 06 registerBeanPostProcessors
- 07 initMessageSource
- 08 initApplicationEventMulticaster
- 09 onRefresh
- 10 registerListeners
- 11 finishBeanFactoryInitialization
- 12 finishRefresh
- 13 resetCommonCaches
- 14 全体系图解
01 prepareRefresh
容器刷新前的准备工作
- 设置容器的启动时间
- 设置活跃状态为true
- 设置关闭状态为false
- 获取Environment对象,并加载当前系统的属性值到Environment对象中
- 准备监听器和事件的集合对象,默认为空的集合
02 obtainFreshBeanFactory
创建容器,并且完成配置文件的加载
- 创建 DefaultListableBeanFactory 容器对象
- 完成配置文件的加载
- 将配置文件解析成文档对象
- 根据文档的节点信息封装成一个个的 BeanDefinition 对象并放入容器
流程图
代码流程图
03 prepareBeanFactory
beanFactory 的准备工作,对 beanFactory 各种属性进行填充
如表达式的解析策略、属性编辑注册器等
04 postProcessBeanFactory
默认没有实现,留给子类进行实现操作
05 invokeBeanFactoryPostProcessors
执行 BFPP 接口中的方法
02 Spring 源码总结 - invokeBeanFactoryPostProcessors()
03 Spring 源码总结 - ConfigurationClassPostProcessor
06 registerBeanPostProcessors
注册BeanPostProcessors
04 Spring 源码总结 - registerBeanPostProcessors()
07 initMessageSource
为上下文初始化 message 源,即不同语言的消息体,国际化处理
08 initApplicationEventMulticaster
初始化事件广播器
05 Spring 源码总结 - 事件监听
09 onRefresh
在 spring 中默认没有任何实现,留给子类来初始化其他的bean
10 registerListeners
注册 listener bean 到消息广播器中
05 Spring 源码总结 - 事件监听
11 finishBeanFactoryInitialization
完成所有非懒加载的单例对象的实例化操作,此方法开始进行对象的创建,包含实例化,初始化,循环依赖,AOP等核心逻辑处理
流程图
06 Spring 源码总结 - 循环依赖
07 Spring 源码总结 - 创建Bean
12 finishRefresh
完成整个容器的启动,所有的对象都准备完成,可以进行后续业务流程的操作,清除上下文缓存,初始化生命周期处理器,发送刷新完成事件
13 resetCommonCaches
清空运行过程中产生的缓存