其類繼承體系如下:
通常會呼叫refresh() 方法,它是ioc容器才初始化的入口。首先會去獲取乙個beanfactory,實際上為defaultlistablebeanfactory。它持有beandefinitionmap,裡面儲存上一節提到的beandefinition,同時還有beandefinitionnames、singletonobjects(用來儲存例項化後的單例項物件)等物件。在此之前,還有很重要的一步,是呼叫refreshbeanfactory()方法,用來根據指定的路徑找到resource檔案,然後讀取檔案轉換成spring的內部結構beandefinition,並且以key-value的形式存入到
beandefinitionmap,用來提供給後續例項化bean時使用。
獲取到beanfactory以後會進行一系列的預處理,包括context's class loader、
messagesource registered、post-processing等。重點在於finishbeanfactoryinitialization(beanfactory)方法,它會去例項化單例項、非延遲載入(spring 預設bean配置)的bean。首先會去beandefinitionmap獲取bean定義,然後呼叫getbean(beanname)去例項化bean,並將它放到
defaultlistablebeanfactory的
singletonobjects(map)中去。
整個ioc容器的初始化,大致是這個流程,具體spring還會支援各種屬性配置,以及初始化前後支援的各種操作等。通過debug源**,可以針對想要了解的細節及模組研究其實現原理。
二 Spring的整體架構
spring框架是乙個分層架構,它包含一系列的功能要素,並被分為大約20個模組,如 這些模組總結為以下部分 1.core container core和bean模組是框架的基礎部分,提供ioc 控制反轉 和依賴注入特性。這裡的基礎概念是beanfactory,它提供對factory模式的經典實現來消...
Spring原始碼分析(二)
針對spring中bean初始化時擴充套件類執行順序進行分析 通過getbean逐層最終到bean例項化前後呼叫的方法,主要是aware介面 beanpostprocessor initializingbean init method的呼叫順序 abstractbeanfactory dogetbe...
spring 整體架構
1.core container 核心容器 core 包含spring框架的核心工具類 beans 包含訪問配置檔案 建立和管理bean 以及進行ioc di 相關操作的所有類 context 整合beans為spring框架提供大量的擴充套件 expression language 提供表示式語言...