Spring原始碼學習

2021-08-31 17:58:59 字數 1611 閱讀 8610

a)

spring 初始化的時候首先要執行的類為: org.springframework.web.context. contextloaderlistener 或 org.springframework.web.context. contextloaderservlet 。

接下來看一下在這個方法裡幹了寫什麼

b)c)

if (configlocation != null)

它將我們的配置檔名放置到 wac 變數中,以待在後續的操作中使用。然後呼叫 「 wac.refresh(); 」完成主要的初始化 beanfactory 的操作。如下。

d)首先我們應該看一下我們例項化的物件

f)protected void loadbeandefinitions(defaultlistablebeanfactory) ,然後這裡又呼叫了自己定義的 protected void loadbeandefinitions(xmlbeandefinitionreader) 方法。此時,它就使用到了在 c) 中設定了的( wac.setconfiglocations(……)) 我們開發中密切相關的配置檔案。(同時也要記住此時這個函式的引數 beandefinitionreader ,之前已經設定了「beandefinitionreader.setresourceloader(this);(乙個定義好了的上下文))。接著往下:

「 reader.loadbeandefinitions(configlocations[i]); 」 reader 開始載入我們配置檔案內的東西了,不過真正複雜的實現此時才開始,我們繼續往下走,在接下來的方法內預設情況下會執行:

if (resourceloader instanceof resourcepatternresolver) (該判斷條件為 true ) , 由於從上面我們知道:beandefinitionreader.setresourceloader(this);所以((resourcepatternresolver) resourceloader).getresources(location);得到乙個 resource 陣列,接下來呼叫:

int loadcount = loadbeandefinitions(resources);該函式繼續呼叫自己子類定義的一系列臨時介面最終執行到return doloadbeandefinitions(inputsource, encodedresource.getresource());在這個函式內初始化了處理 xml 檔案的一些物件並將使用者的配置檔案解析為乙個 document 物件。然後又執行了一系列函式直到

return parser.registerbeandefinitions(this, doc, resource);這個函式來自我們新建的 defaultxmlbeandefinitionparser ,在這個類裡最終執行了對 xml 檔案的解析工作和對 beanfacroty 變數執行了設定工作。

g)此時 spring 初始化過程就結束了。

spring 原始碼學習

springioc 學習 1 依賴查詢 2 依賴注入 spring實現ioc的思路是提供一些配置資訊用來描述類之間的依賴關係,然後由容器去解析這些配置資訊,繼而維護好物件之間的依賴關係,前提是物件之間的依賴關係必須在類中定義好 spring依賴注入的方法 構造方法和setter方法 3 類載入模式 ...

spring原始碼學習

1.beandefinitionregistry是儲存bean定義資訊的介面 2.例項化beanfactorypostprocessor,3.初始化工廠 4.迴圈呼叫beanfactorypostprocessor.postprocessbeanfactory 5.例項化beanpostproces...

spring原始碼學習

從零開始分析spring原始碼 new beandefinition的繼承關係 attributeaccessor 屬性訪問器 增刪改查屬性 beanmetadataelement 沒明白啥意思以後再說 beandefinition中有乙個resolvabletype getresolvablety...