文章目錄
- 一、為何這個階段如此重要?
- 二、整體流程全景圖
- 三、源碼級深度解析
- 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配置加載流程中的模式協作
關注「[一只藍色猿]」,獲取更多開發干貨、技術解析和效率工具!