問題**:
有乙個bean為a,乙個bean為b。想要a在容器例項化的時候的乙個屬性name賦值為b的乙個方法funb的返回值。
如果只是在a裡單純的寫著:
private b b;
private string name = b.funb();
會報錯說nullpointexception,因為這個時候b還沒被set進來,所以為null。
解決辦法為如下**,同時學習下spring中 initializingbean ,物件構造方法 , init-method 的執行順序。
public class a implements initializingbean
public a()
public void init()
@override
public string tostring()
public void afterpropertiesset() throws exception
}public class b
public b()
}spring配置檔案
www.cppcns.comtestspring.b">
測試**:
public static void main(string args)
程式輸出為:
a initialed
b initialed
a.setb initialed
afterpropertiesset
init
funb
從這裡看到a的name屬性在bean載入完成的時候也被成功設定為b的funb方法的返回值了,要點就是用init-method來實現。
載入順序也可以看到為:
先建構函式——>然後是b的set方法注入——>initializingbean 的afterpropertiesset方法——>init-method方法
以下內容是從書中摘錄來的,但是我發現即使摘錄一遍,對其內容的理解也會更加深入!
一、spring裝配bean的過程
1. 例項化;
2. 設定屬性值;
3. 如果實現了beannameaware介面,呼叫setbeanname設定bean的id或者name;
4. 如果實現beanfactoryaware介面,呼叫setbeanfactory 設定beanfactory;
5. 如果實現applicationcontextaware,呼叫setapplicationcontext設定applicationcontext
6. 呼叫beanpostprocessor的預先初始化方法;
7. 呼叫initializingbean的afterpropertiesset()方法;
8. 呼叫定製init-method方法;
9. 呼叫beanpostprocessor的後初始化方法;
spring容器關閉過程
1. 呼叫disposablebean的destroy();
2. 呼叫定製的destroy-method方法;
一、單一bean
裝載1. 例項化;
2. 設定屬性值;
3. 如果實現了beannameaware介面,呼叫setbeanname設定bean的id或者name;
4. 如果實現beanfactoryaware介面,呼叫setbeanfactory 設定beanfactory;
5. 如果實現applicationcontextaware,呼叫setapplicationcontext設定applicationcontext
6. 呼叫beanpostprocessor的預先初始化方法;
7. 呼叫initializingbean的afterpropertiesset()方法;
8. 呼叫定製init-method方法;
9. 呼叫beanpostprocessor的後初始化方法;
spring容器關閉
1. 呼叫disposablebean的destroy();
2. 呼叫定製的destroy-method方法;
二、多個bean的先後順序
優先載入beanpostprocessor的實現bean
按bean檔案和bean的定義順序按bean的裝載順序(即使載入多個spring檔案時存在id覆蓋)
「設定屬性值」(第2步)時,遇到ref,則在「例項化」(第1步)之後先載入ref的id對應的bean
abstractfactorybean的子類,在第6步之後,會呼叫createinstance方法,之後會呼叫getobjecttype方程式設計客棧法
bean程式設計客棧fa程式設計客棧ctoryutils類也會改變bean的載入順序
JS 的載入執行順序
近來對js在html中的載入順序有點小疑惑,遂測試分析了一把 just a test case.you are in footer.結果依次為 div標籤 before head 出現,i m in head div標籤 after head 出現,i m in body part1 div jus...
Java類載入執行順序
簡要記錄類的載入執行順序 先說結論 父類靜態 塊 變數 子類靜態 塊 變數 父類普通 變數 塊 父類構造器 子類普通 變數 塊 子類構造器 具體執行過程 程式先找到main函式,不管此時有沒有使用new進行建立物件,都會將涉及到的類 例如父類 進行類載入 發現son類有乙個父類father類 初始化...
jraiser模組載入執行簡要總結
1 在html檔案中,通過require方式來載入指定的入口檔案 2 然後通過正規表示式來匹配入口檔案中的所有require的依賴檔案 注意,此時入口檔案已載入完畢,不過,還沒執行而已。3 之後逐一通過script來新增到dom中,進行載入所有依賴的js檔案 4 等所有依賴的js檔案都載入完畢,再執...