試著看Spring原始碼(IOC)一

2021-09-24 11:44:33 字數 1163 閱讀 6228

本文主要說ioc,下次說aop。

beanfactory生產 bean 的工廠,它負責生產和管理各個 bean 例項。

背下來肯定是不需要的,有幾個重點和大家說明下就好。

請先不用花時間在其他的介面和類上,先理解我說的這幾點就可以了。

refresh()更新-使用好多其他的方法

建立bean容器preparerefresh()

建立新的beanfactory,載入bean定義,註冊bean等等configurablelisrtablebeanfactory()

beanfactory還有兩個非常重要的屬性:是否bean覆蓋和是否迴圈引用

defaultlistablebeanfactory是大哥

beandefinition 介面定義

public inte***ce beandefinition extends attributeaccessor, beanmetadataelement
有了 beandefinition 的概念以後,我們再往下看 refreshbeanfactory() 方法中的剩餘部分:

customizebeanfactory

loadbeandefinitions

就是配置是否允許 beandefinition 覆蓋、是否允許迴圈引用。

protected void customizebeanfactory(defaultlistablebeanfactory beanfactory) 

if (this.allowcircularreferences != null)

}

注意:beandefinition這個坑,就是在配置檔案中定義 bean 時使用了相同的 id 或 name,預設情況下,allowbeandefinitionoverriding 屬性為 null,如果在同一配置檔案中重複了,會拋錯,但是如果不是同一配置檔案中,會發生覆蓋。

可是 spring 預設是不同檔案的時候可以覆蓋的。

Spring原始碼 IOC(一)

它是spring中bean容器的頂級介面。裡面有獲取bean,判斷是否包含bean,是否單例,獲取別名等基本方法 listablebeanfactory 根據條件獲取bean的配置清單。如string getbeandefinitionnames 返回bean在工廠中定義的名稱。bean在工廠中定義...

Spring原始碼學習(一) IoC

一直想抽空把spring原始碼拿來讀讀,但真正去做這件事的時候發現不簡單,spring發展這麼多年,它的規模已不是乙個一般的開源框 架所能比的,它的主要架構和流程不是非常清晰,很難抓到要害,但有一點可以肯定,它的根基是ioc和aop,所有的功能擴充套件和對其他開源框架的支援都是基 於這兩點來做的,因...

Spring原始碼學習(一) IoC

一直想抽空把spring原始碼拿來讀讀,但真正去做這件事的時候發現不簡單,spring發展這麼多年,它的規模已不是乙個一般的開源框架所能比的,它的主要架構和流程不是非常清晰,很難抓到要害,但有一點可以肯定,它的根基是ioc和aop,所有的功能擴充套件和對其他開源框架的支援都是基於這兩點來做的,因此要...