文章目录
- 一、为何这个阶段如此重要?
- 二、整体流程全景图
- 三、源码级深度解析
- 1. BeanFactory的诞生
- 源码入口:refresh()方法
- 核心方法:obtainFreshBeanFactory()
- 核心实现:refreshBeanFactory()
- BeanFactory实例化
- 2. ★ 核心:加载配置元数据(从文件到内存对象)
- XML配置加载入口
- 加载Bean定义
- XML配置解析核心流程
- Bean定义解析核心
- 解析Bean定义的核心方法
- 解析默认元素
- 3. BeanDefinition解析:配置的"灵魂转换"
- 解析`<bean>`元素:
- 解析BeanDefinition
- BeanDefinition关键属性:
- 注册到容器
- 4. BeanDefinition注册:容器"花名册"
- 四、Spring的巧妙设计
- 1. 分层解析架构
- 2. 资源加载抽象体系
- 3. 元数据解析过程优化
- 五、核心要点总结
深入Spring心脏,探索IOC容器启动最关键的一步(refresh()方法:十二步精密流程中的步骤2-获取BeanFactory(obtainFreshBeanFactory()))
作为Java开发者,Spring框架早已成为我们日常开发的基石。而Spring的核心便是其强大的IOC容器。今天,我们将深入剖析容器启动过程中最关键的一步:BeanFactory创建与配置元数据加载。
一、为何这个阶段如此重要?
在Spring启动过程中,BeanFactory创建与配置加载是整个容器的基础:
- ✅ 它创建了容器的核心骨架(BeanFactory)
- ✅ 加载并解析所有配置元数据(BeanDefinition 的资源定位过程)
- ✅ 生成(封装)BeanDefinition(Bean的"设计蓝图")
- ✅ 注册BeanDefinition到 IoC容器
没有这个阶段,后续的依赖注入、Bean实例化都无从谈起!
二、整体流程全景图

三、源码级深度解析
1. BeanFactory的诞生
源码入口:refresh()方法
容器创建的起点在AbstractApplicationContext.refresh()方法,其中第二步就是我们要分析的核心:

核心方法:obtainFreshBeanFactory()

核心实现:refreshBeanFactory()
在AbstractRefreshableApplicationContext中实现(以XML配置为例):

BeanFactory实例化

DefaultListableBeanFactory是Spring默认的BeanFactory实现,其核心数据结构:

2. ★ 核心:加载配置元数据(从文件到内存对象)
XML配置加载入口
创建xml的解析器 XmlBeanDefinitionReader ,这里是一个委托模式

加载Bean定义


XML配置解析核心流程


这里用到了委托模式,BeanDefinitionDocumentReader委托这个类进行document的解析

Bean定义解析核心
在DefaultBeanDefinitionDocumentReader中实现:


解析Bean定义的核心方法

解析默认元素

3. BeanDefinition解析:配置的"灵魂转换"
解析<bean>元素:

解析BeanDefinition

BeanDefinition关键属性:
- beanClassName:Bean的类全限定名
- scope:作用域(singleton/prototype等)
- lazyInit:是否延迟初始化
- dependsOn:依赖关系
- constructorArgumentValues:构造参数
- propertyValues:属性值
注册到容器

4. BeanDefinition注册:容器"花名册"
最终注册到BeanFactory的核心方法:

四、Spring的巧妙设计
1. 分层解析架构
Spring采用分层设计,每层职责清晰:

2. 资源加载抽象体系
Spring使用Resource体系抽象各种配置源:

3. 元数据解析过程优化
Spring使用元数据缓存提高解析效率:

五、核心要点总结
- BeanFactory创建:
使用DefaultListableBeanFactory作为默认实现
支持父子容器继承 - 配置加载:
支持多种配置源(XML/注解/JavaConfig)
统一抽象为Resource体系 - BeanDefinition解析:
将配置元数据转化为内存对象
支持自定义命名空间扩展 - 注册机制:
使用ConcurrentHashMap存储BeanDefinition
维护注册顺序列表
Spring IOC容器就像一座精密的钟表,而BeanFactory的创建与配置加载就是它的主发条。只有深入理解这一核心机制,我们才能真正掌握Spring框架的精髓,编写出高效、稳定的企业级应用。
XML配置加载流程中的模式协作

关注「[一只蓝色猿]」,获取更多开发干货、技术解析和效率工具!