Java教程

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

本文主要是介绍Spring源码--02--Spring流程概述---refresh的12个步骤,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

文章目录

  • debug spring流程概述
    • 1.启动类:ClassPathXmlApplicationContext
    • 2.ClassPathXmlApplicationContext
        • 调用父类构造方法,进行相关的对象创建等操作,包含属性的赋值操作
  • refresh()方法
        • 重要的refresh中的12个方法
    • 步骤
    • 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
        • 观察者模式--Observer
    • 11.==finishBeanFactoryInitialization==
    • 12. finishRefresh
  • 总结


debug spring流程概述

在这里插入图片描述
在这里插入图片描述

1.启动类:ClassPathXmlApplicationContext

在这里插入图片描述
在这里插入图片描述

2.ClassPathXmlApplicationContext

构造方法
在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

进入refresh()
在这里插入图片描述

refresh()方法

重要的refresh中的12个方法

在这里插入图片描述
在这里插入图片描述

步骤

  1. prepareRefresh
  2. obtainFreshBeanFactory
  3. prepareBeanFactory
  4. postProcessBeanFactory
  5. invokeBeanFactoryPostProcessors
  6. registerBeanPostProcessors
  7. initMessageSource
  8. initApplicationEventMulticaster
  9. onRefresh
  10. registerListeners
  11. finishBeanFactoryInitialization
  12. finishRefresh
    步骤2-6是创建并准备beanFactory对象
    步骤7-12是完善applicationContext的其他功能
    步骤11是创建非懒加载的单例对象

1.prepareRefresh()

在这里插入图片描述

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

  1. 设置容器的启动时间
  2. 设置活跃状态为true
  3. 设置关闭状态为false
  4. 获取Environment对象,并加载当前系统的属性值到Environment对象中
  5. 准备监听器和事件的集合对象,默认为空的集合
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.obtainFreshBeanFactory();

在这里插入图片描述

  1. 创建容器对象:DefaultListableBeanFactory
  2. 加载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通知别人

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

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

在这里插入图片描述

这篇关于Spring源码--02--Spring流程概述---refresh的12个步骤的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!