Spring--ApplicationContext容器refresh过程

本文详细剖析了Spring ApplicationContext容器的refresh过程,包括设置配置路径、扩展功能如源码解析、BeanFactory后处理、BeanPostProcessor注册等。文章通过源码分析了Spring在初始化BeanFactory、激活BeanFactoryPostProcessor、注册监听器等关键步骤,展示了Spring如何构建和刷新上下文。
摘要由CSDN通过智能技术生成

ApplicationContextBeanFactory都是用来加载Bean的,但是ApplicationContext提供了更多的扩展功能。
使用两者加载配置文件写法的不同:
在这里插入图片描述

ApplicationContext

构造函数:

在这里插入图片描述

设置配置路径

ClassPathXmlApplicationContext中支持多个配置文件以数组的方式同时传入,设置配置路径的具体实现:
在这里插入图片描述

扩展功能

设置路径之后就可以根据路径做配置文件的解析以及各种功能的实现了,refresh函数中包含了几乎ApplicationContext中提供的全部功能。

源码

在这里插入图片描述

在这里插入图片描述

整体的步骤:

  1. 初始化前的准备工作:例如对系统属性或者环境变量进行准备以及验证。在某种情况下项目的使用需要读取某些系统变量,而这个变量的设置很可能会影响着系统的正确性,那么ClassPathXmlApplicationContext为我们提供的这个准备函数就显得非常的重要,可以在Spring启动的时候提前对必须的环境变量进行存在性验证。
  2. 初始化BeanFactory,并进行XML文件读取ClassPathXmlApplicationContext包含着对BeanFactory所提供的一切特征,那么这一步将会复用BeanFactory中的配置文件读取解析其他功能,这一步之后ClassPathXmlApplicationContext实际上已经包含了BeanFactory所提供的功能,也就是可以进行Bean的提取等基本操作。
  3. 对BeanFactory进行各种功能填充。通过@Qualifier和@Autowired注解增加支持。
  4. 子类覆盖方法做额外处理。Spring之所以强大除了它为大家提供了遍历之外,还因为它完美的架构,开放式的架构让使用它的程序员很容易根据业务需要扩展已经存在的功能,本例中就提供了一个空的函数实现postProcessBeanFactory来方便程序员在业务上做进一步扩展。
  5. 激活各种BeanFactory处理器
  6. 注册拦截bean创建的bean处理器,这里只是注册,真正的调用是在getBean时候
  7. 为上下文初始化Message源以及对不同语言进行国际化处理
  8. 初始化应用消息广播器,并放入applicationEventMulticasterBean中
  9. 留给子类来初始化其他的bean
  10. 在所有注册的bean中查找Listener bean,注册到消息广播器中
  11. 初始化剩下的单实例(非惰性的)
  12. 完成刷新过程,通知生命周期处理器lifecycleProcessor刷新过程,同时发出ContextRefreshEvent通知别人。

具体分析

prepareRefresh刷新上下文的准备工作

在这里插入图片描述

obtainFreshBeanFactory(读取xml并初始化BeanFactory)

该函数是获取beanFactory,ApplicationContext是对BeanFactory的扩展,在其基础上添加了大量的基础应用,该函数是正式实现beanFactory的地方,经过这个函数之后,ApplicationContext就有了BeanFactory的全部功能。
在这里插入图片描述
refreshBeanFactory方法,该方法是在

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值