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

Posted 高高for 循环

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring源码--02--Spring流程概述---refresh的12个步骤相关的知识,希望对你有一定的参考价值。

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

文章目录


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个步骤的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security源码:登录认证源码流程

Spring Security源码:登录认证源码流程

Java单体应用 - 常用框架 - 02.Spring

02Spring源码-手写篇-手写DI实现

02Spring源码-手写篇-手写DI实现

02 spring security 自定义用户认证流程