本文主要是介绍Spring源码--02--Spring流程概述---refresh的12个步骤,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- debug spring流程概述
- 1.启动类:ClassPathXmlApplicationContext
- 2.ClassPathXmlApplicationContext
- 调用父类构造方法,进行相关的对象创建等操作,包含属性的赋值操作
- refresh()方法
-
- 步骤
- 1.prepareRefresh()
- 2.obtainFreshBeanFactory();
- createBeanFactory----创建bean工厂
- **==new 一个 DefaultListableBeanFactory==** ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20210505175837575.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODA1MjE2MQ==,size_16,color_FFFFFF,t_70)
- loadBeanDefinitions--加载bean的定义信息
- **==加载bean的定义信息==** ![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=20210505180822832.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODA1MjE2MQ==,size_16,color_FFFFFF,t_70)
- 3.prepareBeanFactory
- 4.postProcessBeanFactory
-
- 5.invokeBeanFactoryPostProcessors
- 执行==BeanFactoryPostProcessor== 执行器
- 6.registerBeanPostProcessors
- 7.initMessageSource
- 8.initApplicationEventMulticaster
- 9.onRefresh
- 10.registerListeners
-
- 11.==finishBeanFactoryInitialization==
- 12. finishRefresh
- 总结
debug spring流程概述
![在这里插入图片描述](/upload/202202/04/202202041716187212.png)
![在这里插入图片描述](/images/baidian.png)
1.启动类:ClassPathXmlApplicationContext
![在这里插入图片描述](/upload/202202/04/202202041716225322.png)
![在这里插入图片描述](/upload/202202/04/202202041716291469.png)
2.ClassPathXmlApplicationContext
构造方法
![在这里插入图片描述](/upload/202202/04/202202041716414575.png)
调用父类构造方法,进行相关的对象创建等操作,包含属性的赋值操作
![在这里插入图片描述](/upload/202202/04/202202041716455395.png)
![在这里插入图片描述](/upload/202202/04/202202041716487207.png)
![在这里插入图片描述](/upload/202202/04/202202041716527695.png)
进入refresh()
![在这里插入图片描述](/images/baidian.png)
refresh()方法
重要的refresh中的12个方法
![在这里插入图片描述](/images/baidian.png)
![在这里插入图片描述](/images/baidian.png)
步骤
- prepareRefresh
- obtainFreshBeanFactory
- prepareBeanFactory
- postProcessBeanFactory
- invokeBeanFactoryPostProcessors
- registerBeanPostProcessors
- initMessageSource
- initApplicationEventMulticaster
- onRefresh
- registerListeners
- finishBeanFactoryInitialization
- finishRefresh
步骤2-6是创建并准备beanFactory对象
步骤7-12是完善applicationContext的其他功能
步骤11是创建非懒加载的单例对象
1.prepareRefresh()
![在这里插入图片描述](/upload/202202/04/202202041717027934.png)
前置准备,做容器刷新前的准备工作
- 设置容器的启动时间
- 设置活跃状态为true
- 设置关闭状态为false
- 获取Environment对象,并加载当前系统的属性值到Environment对象中
- 准备监听器和事件的集合对象,默认为空的集合
![在这里插入图片描述](/images/baidian.png)
![在这里插入图片描述](/images/baidian.png)
![在这里插入图片描述](/images/baidian.png)
2.obtainFreshBeanFactory();
![在这里插入图片描述](/upload/202202/04/202202041717078486.png)
- 创建容器对象:DefaultListableBeanFactory
- 加载xml配置文件的属性值到当前工厂中,最重要的就是BeanDefinition
![在这里插入图片描述](/upload/202202/04/202202041717095893.png)
![在这里插入图片描述](/upload/202202/04/202202041717152935.png)
createBeanFactory----创建bean工厂
![在这里插入图片描述](/upload/202202/04/202202041717234922.png)
new 一个 DefaultListableBeanFactory ![在这里插入图片描述](/images/baidian.png)
DefaultListableBeanFactory
![在这里插入图片描述](/images/baidian.png)
为了序列化指定id,可以从id反序列化到beanFactory对象
![在这里插入图片描述](/images/baidian.png)
定制beanFactory,设置相关属性,包括是否允许覆盖同名称的不同定义的对象以及循环依赖
![在这里插入图片描述](/images/baidian.png)
loadBeanDefinitions–加载bean的定义信息
![在这里插入图片描述](/upload/202202/04/202202041717317475.png)
![在这里插入图片描述](/images/baidian.png)
加载bean的定义信息 ![在这里插入图片描述](/images/baidian.png)
beandefinitionMap ![在这里插入图片描述](/upload/202202/04/202202041717372798.png)
![在这里插入图片描述](/upload/202202/04/202202041717571753.png)
一路返回到 3.AbstractApplicationContext
![在这里插入图片描述](/upload/202202/04/202202041718026318.png)
![在这里插入图片描述](/upload/202202/04/202202041718137885.png)
3.prepareBeanFactory
beanFactory的准备工作,对各种属性进行填充
![在这里插入图片描述](/images/baidian.png)
![在这里插入图片描述](/upload/202202/04/202202041718278750.png)
![在这里插入图片描述](/images/baidian.png)
![在这里插入图片描述](/upload/202202/04/202202041718323076.png)
![在这里插入图片描述](/upload/202202/04/202202041718347949.png)
4.postProcessBeanFactory
![在这里插入图片描述](/upload/202202/04/202202041718390328.png)
留给子类做扩展用的方法
![在这里插入图片描述](/images/baidian.png)
5.invokeBeanFactoryPostProcessors
调用各种beanFactory处理器
![在这里插入图片描述](/upload/202202/04/202202041718431391.png)
![在这里插入图片描述](/images/baidian.png)
![在这里插入图片描述](/upload/202202/04/202202041718463833.png)
执行BeanFactoryPostProcessor 执行器
![在这里插入图片描述](/upload/202202/04/202202041718480215.png)
![在这里插入图片描述](/upload/202202/04/202202041718588662.png)
![在这里插入图片描述](/images/baidian.png)
6.registerBeanPostProcessors
注册bean处理器,这里只是注册功能,真正调用的是getBean方法
![在这里插入图片描述](/upload/202202/04/202202041719023803.png)
实例化并且注册所有的beanPostProcessor
![在这里插入图片描述](/upload/202202/04/202202041719045180.png)
![在这里插入图片描述](/images/baidian.png)
![在这里插入图片描述](/images/baidian.png)
7.initMessageSource
为上下文初始化message源,即不同语言的消息体,国际化处理
![在这里插入图片描述](/images/baidian.png)
![在这里插入图片描述](/upload/202202/04/202202041719111357.png)
![在这里插入图片描述](/upload/202202/04/202202041719165703.png)
8.initApplicationEventMulticaster
初始化事件监听多路广播器
![在这里插入图片描述](/images/baidian.png)
![在这里插入图片描述](/images/baidian.png)
![在这里插入图片描述](/upload/202202/04/202202041719200669.png)
9.onRefresh
留给子类来初始化其他的bean
![在这里插入图片描述](/upload/202202/04/202202041719202558.png)
![在这里插入图片描述](/upload/202202/04/202202041719204448.png)
10.registerListeners
遍历应用程序中存在的监听器集合,并将对应的监听器添加到监听器的多路广播器中
![在这里插入图片描述](/upload/202202/04/202202041719206528.png)
观察者模式–Observer
![在这里插入图片描述](/upload/202202/04/202202041719210151.png)
![在这里插入图片描述](/upload/202202/04/202202041719212041.png)
![在这里插入图片描述](/upload/202202/04/202202041719214101.png)
11.finishBeanFactoryInitialization
初始化剩下的单实例(非懒加载的)
![在这里插入图片描述](/upload/202202/04/202202041719215976.png)
![在这里插入图片描述](/upload/202202/04/202202041719218178.png)
![在这里插入图片描述](/upload/202202/04/202202041719220268.png)
![在这里插入图片描述](/upload/202202/04/202202041719222490.png)
12. finishRefresh
- 完成刷新过程,通知生命周期处理器lifecycleProcessor刷新过程,
- 同时发出ContextRefreshEvent通知别人
![在这里插入图片描述](/upload/202202/04/202202041719225161.png)
![在这里插入图片描述](/upload/202202/04/202202041719227373.png)
![在这里插入图片描述](/upload/202202/04/202202041719229570.png)
![在这里插入图片描述](/upload/202202/04/202202041719231685.png)
总结
- prepareRefresh:准备好环境变量,配置变量
- obtainFreshBeanFactory:创建或获取bean工厂,并加载BeanDefinition
- prepareBeanFactory:beanFactory的准备工作,对各种属性进行填充
- postProcessBeanFactory:留给子类子类去扩展bean工厂
- invokeBeanFactoryPostProcessors:自定义beanFactory后置处理器去扩展bean工厂
- registerBeanPostProcessors:注册bean后置处理器
- initMessageSource:为spring容器提供国际化功能
- initApplicationEventMulticaster:为spring容器提供事件发布器
- onRefresh:留给子类对spring容器进行扩展
- registerListeners:为spring容器注册监听器
- finishBeanFactoryInitialization:初始化剩余的非懒加载单例bean,执行bean后置处理器扩展
- finishRefresh:准备spring容器生命周期管理器,发布contextRefreshed事件
![在这里插入图片描述](/upload/202202/04/202202041719237509.png)
这篇关于Spring源码--02--Spring流程概述---refresh的12个步骤的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!