文章目录
- 一、为何这个阶段如此重要?
- 二、整体流程全景图
- 三、源码级深度解析
- 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配置加载流程中的模式协作
关注「[一只蓝色猿]」,获取更多开发干货、技术解析和效率工具!