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

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

文章目录


debug spring流程概述

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

1.启动类:ClassPathXmlApplicationContext

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

2.ClassPathXmlApplicationContext

构造方法
Spring源码--02--Spring流程概述---refresh的12个步骤

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

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

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

进入refresh()
Spring源码--02--Spring流程概述---refresh的12个步骤

refresh()方法

重要的refresh中的12个方法

Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---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()

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

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

  1. 设置容器的启动时间
  2. 设置活跃状态为true
  3. 设置关闭状态为false
  4. 获取Environment对象,并加载当前系统的属性值到Environment对象中
  5. 准备监听器和事件的集合对象,默认为空的集合
    Spring源码--02--Spring流程概述---refresh的12个步骤
    Spring源码--02--Spring流程概述---refresh的12个步骤
    Spring源码--02--Spring流程概述---refresh的12个步骤

2.obtainFreshBeanFactory();

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

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

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

createBeanFactory----创建bean工厂

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

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

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

为了序列化指定id,可以从id反序列化到beanFactory对象
Spring源码--02--Spring流程概述---refresh的12个步骤
定制beanFactory,设置相关属性,包括是否允许覆盖同名称的不同定义的对象以及循环依赖
Spring源码--02--Spring流程概述---refresh的12个步骤

loadBeanDefinitions–加载bean的定义信息

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

加载bean的定义信息 Spring源码--02--Spring流程概述---refresh的12个步骤

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

一路返回到 3.AbstractApplicationContext
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤

3.prepareBeanFactory

beanFactory的准备工作,对各种属性进行填充
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤

4.postProcessBeanFactory

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

留给子类做扩展用的方法

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

5.invokeBeanFactoryPostProcessors

调用各种beanFactory处理器
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤

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

执行BeanFactoryPostProcessor 执行器

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

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

6.registerBeanPostProcessors

注册bean处理器,这里只是注册功能,真正调用的是getBean方法
Spring源码--02--Spring流程概述---refresh的12个步骤
实例化并且注册所有的beanPostProcessor
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤

7.initMessageSource

为上下文初始化message源,即不同语言的消息体,国际化处理
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤

8.initApplicationEventMulticaster

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

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

9.onRefresh

留给子类来初始化其他的bean
Spring源码--02--Spring流程概述---refresh的12个步骤
Spring源码--02--Spring流程概述---refresh的12个步骤

10.registerListeners

遍历应用程序中存在的监听器集合,并将对应的监听器添加到监听器的多路广播器中
Spring源码--02--Spring流程概述---refresh的12个步骤

观察者模式–Observer

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

11.finishBeanFactoryInitialization

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

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

12. finishRefresh

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

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

总结

  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个步骤

上一篇:获取当前标准格式化日期时间


下一篇:第12章 Linux实操篇-Linux磁盘分区、挂载