強烈建議大家從git上拉取spring原始碼來學習spring原始碼。因為裡面相較於idea生成的會有注釋,裡面有的方法會有注釋看起來會省力一點。
以下都是用5.0.2版本來做闡述。
寫在前面:建議大家一定要自己用例項跑一遍,做好記錄。如果只是看看會非常抽象。此流程圖作為梗概,便於加強記憶和理解,新手或無基礎的有個印象即可。等跟隨本文走通一遍,在回過頭看這個圖,或許會有收穫
bean的定義
這是我的bean目錄結構,只是做乙個例子
獲取核心容器物件,bean最後都會放在此容器物件中
public class mytest
}建議用idea的debug模式來觀察spring的ioc過程
向下執行,檢視refresh()
利用this.createbeanfactory() 建立了乙個beanfactory,型別為defaultlistablebeanfactory
這個類接著往下走:this.loadbeandefinitions(beanfactory);
* load bean definitions into the given bean factory, typically through
* delegating to one or more bean definition readers.
這個方法會將beandefinitionsreader讀取到的bean definitions放入bean工廠,我們以上提出的三種
注入方式都會走到這裡,將bean資訊丟進去
返回上述 refresh()
beanfactory.preinstantiatesingletons();例項化方法
進入到createbean方法中
繼續進入
這個方法注釋說明了例項化物件是用構造器完成的
以上就是bean物件例項化的基本過程,下面是例項化完成後的初始化過程
回到這裡,例項化完成後
注釋說明了在populatebean完成bean的初始化
繼續
會看到在此方法裡會呼叫前置和後置處理器來初始化bean
以上就完成了bean的例項化過程,文章開頭的那個圖剛開始有點懵,但是一旦跑完一遍bean的例項化過程,再次結合圖,就清晰了很多。本文只是簡單的跟隨debug順序,完整的走了一遍bean例項化的過程,還有特殊情況並沒有討論,後期會重新用新文章再來拓展。
如有不足還請指正。
Spring Bean建立物件的步驟方式詳解
1.通過無參建構函式建立 預設 2.通過有參構造建立 1.constructor 的index賦值 2.constructor 的 type 方式 j a.lang.string value 3.constructor 的name方式 程式設計客棧 name value 123 name 變數名 3...
spring bean載入過程
spring通過資源載入器載入相應的xml檔案,使用讀取器讀取資源載入器中的檔案到讀取器中,在讀取過程中,解析相應的xml檔案元素,轉化為spring定義的資料結beandefinition,把相應的beandefinition註冊到登錄檔中。登錄檔中包含的beandefinition的資料結構,沒...
Spring bean銷毀的過程
一 defaultsingletonbeanregistry之destroysingleton string beanname 銷毀單例beanpublic void destroysingleton string beanname destroybean beanname,disposablebe...