欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Spring源码--02--Spring流程概述---refresh的12个步骤

时间:2023-08-13

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

debug spring流程概述

1.启动类:ClassPathXmlApplicationContext2.ClassPathXmlApplicationContext

调用父类构造方法,进行相关的对象创建等操作,包含属性的赋值操作 refresh()方法

重要的refresh中的12个方法 步骤1.prepareRefresh()2.obtainFreshBeanFactory();

createBeanFactory----创建bean工厂**==new 一个 DefaultListableBeanFactory==** ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210505175837575.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODA1MjE2MQ==,size_16,color_FFFFFF,t_70)loadBeanDefinitions--加载bean的定义信息 **==加载bean的定义信息==** ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210505180822832.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODA1MjE2MQ==,size_16,color_FFFFFF,t_70)3.prepareBeanFactory4.postProcessBeanFactory

留给子类做扩展用的方法 5.invokeBeanFactoryPostProcessors

执行==BeanFactoryPostProcessor== 执行器 6.registerBeanPostProcessors7.initMessageSource8.initApplicationEventMulticaster9.onRefresh10.registerListeners

观察者模式--Observer 11.==finishBeanFactoryInitialization==12、finishRefresh 总结


debug spring流程概述


1.启动类:ClassPathXmlApplicationContext


2.ClassPathXmlApplicationContext

构造方法

调用父类构造方法,进行相关的对象创建等操作,包含属性的赋值操作


进入refresh()

refresh()方法
重要的refresh中的12个方法


步骤 prepareRefreshobtainFreshBeanFactoryprepareBeanFactorypostProcessBeanFactoryinvokeBeanFactoryPostProcessorsregisterBeanPostProcessorsinitMessageSourceinitApplicationEventMulticasteronRefreshregisterListenersfinishBeanFactoryInitializationfinishRefresh
步骤2-6是创建并准备beanFactory对象
步骤7-12是完善applicationContext的其他功能
步骤11是创建非懒加载的单例对象 1.prepareRefresh()

前置准备,做容器刷新前的准备工作

设置容器的启动时间设置活跃状态为true设置关闭状态为false获取Environment对象,并加载当前系统的属性值到Environment对象中准备监听器和事件的集合对象,默认为空的集合


2.obtainFreshBeanFactory(); 创建容器对象:DefaultListableBeanFactory加载xml配置文件的属性值到当前工厂中,最重要的就是BeanDefinition


createBeanFactory----创建bean工厂
new 一个 DefaultListableBeanFactory

DefaultListableBeanFactory

为了序列化指定id,可以从id反序列化到beanFactory对象

定制beanFactory,设置相关属性,包括是否允许覆盖同名称的不同定义的对象以及循环依赖

loadBeanDefinitions–加载bean的定义信息


加载bean的定义信息

beandefinitionMap

一路返回到 3.AbstractApplicationContext

3.prepareBeanFactory

beanFactory的准备工作,对各种属性进行填充




4.postProcessBeanFactory
留给子类做扩展用的方法
5.invokeBeanFactoryPostProcessors

调用各种beanFactory处理器

执行BeanFactoryPostProcessor 执行器


6.registerBeanPostProcessors

注册bean处理器,这里只是注册功能,真正调用的是getBean方法

实例化并且注册所有的beanPostProcessor


7.initMessageSource

为上下文初始化message源,即不同语言的消息体,国际化处理


8.initApplicationEventMulticaster

初始化事件监听多路广播器



9.onRefresh

留给子类来初始化其他的bean

10.registerListeners

遍历应用程序中存在的监听器集合,并将对应的监听器添加到监听器的多路广播器中

观察者模式–Observer



11.finishBeanFactoryInitialization

初始化剩下的单实例(非懒加载的)




12、finishRefresh

完成刷新过程,通知生命周期处理器lifecycleProcessor刷新过程,同时发出ContextRefreshEvent通知别人




总结 prepareRefresh:准备好环境变量,配置变量obtainFreshBeanFactory:创建或获取bean工厂,并加载BeanDefinitionprepareBeanFactory:beanFactory的准备工作,对各种属性进行填充postProcessBeanFactory:留给子类子类去扩展bean工厂invokeBeanFactoryPostProcessors:自定义beanFactory后置处理器去扩展bean工厂registerBeanPostProcessors:注册bean后置处理器initMessageSource:为spring容器提供国际化功能initApplicationEventMulticaster:为spring容器提供事件发布器onRefresh:留给子类对spring容器进行扩展registerListeners:为spring容器注册监听器finishBeanFactoryInitialization:初始化剩余的非懒加载单例bean,执行bean后置处理器扩展finishRefresh:准备spring容器生命周期管理器,发布contextRefreshed事件

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。