栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

文章目录

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事件

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/726356.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号