Spring原始碼研究 容器初始化

2021-06-02 21:02:58 字數 1598 閱讀 8247

新建乙個容器,看看後面幹了啥

xmlbeandefinitionreader.loadbeandefinitions(resource) line: 302 

我們用string指定了xml配置檔案的路徑,spring要將其封裝到resource方便io,這裡的resource指的就是我們的配置

之後經過各種讀取,把resource讀入,其實就是乙個xml文件,又封裝為document例項,xmlbeandefinitionreader.registerbeandefinitions(document, resource) line: 493 

接下來就乙個節點乙個節點解析就可以了,其中bean節點的解析值得深入

defaultbeandefinitiondocumentreader.parsebeandefinitions(element, beandefinitionparserdelegate) line: 133 

if (delegate.isdefaultnamespace(namespaceuri))

else

上面這段**的意思是,document中的element如果namespace是spring的(就是spring自己的)那麼調某個方法,如果不是(就是自定義的),那就調另外的方法。意思就是說我們其實可以自定義spring的節點,現在先看bean節點的解析。

defaultbeandefinitiondocumentreader.processbeandefinition(element, beandefinitionparserdelegate) 看這個方法第一行:

追蹤到下面這個方法,返回乙個beandefinitionholder,它是bean定義的holder(它包含了乙個指向某beandefinition例項的引用),用於向容器註冊的,

org.springframework.beans.factory.xml.beandefinitionparserdelegate.parsebeandefinitionelement(element ele,beandefinition containingbean)

這個方法解析bean節點的name屬性,解析別名,接下來還要得到乙個beandefinition的例項:

396l:abstractbeandefinition beandefinition = parsebeandefinitionelement(ele, beanname, containingbean);

這個方法開始解析bean節點的class屬性,parent屬性

parsemetaelements(ele, bd);——解析元資料

parselookupoverridesubelements(ele, bd.getmethodoverrides());——解析lookup

parseconstructorargelements(ele, bd);——解析構造器

parsepropertyelements(ele, bd);——解析property

各種解析完成,層層返回,註冊到容易中,預設情況下,呼叫容器第一次getbean,就會根據name找到beandefinition,就能找到class資訊,找到其依賴的property,就可以進行例項化了,假如是單例的話就會快取起來,下次getbean直接從快取中獲取該例項。

Spring原始碼 核心 容器

核心思想 容器 web容器 tomcat等 啟動載入web.xml配置檔案,將配置資訊封裝成servletcontext spring配置 contextconfiglocation param name classpath spring dal.xml classpath spring servi...

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

spring原始碼筆記 初識IOC容器

ioc容器和aop是spring的核心,學習spring原始碼對這兩個核心先有個概念上的認識還是有必要的,今天先認識一下什麼是ioc容器,ioc的乙個原理,以及ioc的設計實現。釋義 ioc是inversion of control的縮寫叫控制反轉 它所圍繞的內容是乙個物件如何獲取它所依賴的物件的引...