如果我們說我有一個類A
(@Component)和一個類B
(@Component)。類A
需要B
的實例。如果我使用@Autowired將類B
作爲A中的字段,即使Spring將找到B
組件(通過@ComponentScan),類A
字段也將爲空。但是,如果我在A
的構造函數中將B
作爲參數並使用@Autowired註釋構造函數,則它將完美工作。Spring只能註冊構造器bean嗎?
有沒有什麼辦法可以從A
的構造函數中排除B
?
如果我們說我有一個類A
(@Component)和一個類B
(@Component)。類A
需要B
的實例。如果我使用@Autowired將類B
作爲A中的字段,即使Spring將找到B
組件(通過@ComponentScan),類A
字段也將爲空。但是,如果我在A
的構造函數中將B
作爲參數並使用@Autowired註釋構造函數,則它將完美工作。Spring只能註冊構造器bean嗎?
有沒有什麼辦法可以從A
的構造函數中排除B
?
由於@LuiggiMendoza提到:創建@PostConstruct方法很簡單:你只應@PostConstruct註解你的方法:
public class A {
@PostConstruct
void init(){
//do smth here
}
}
或者,如果您使用XML配置,你可以init-method
參數添加到您的bean定義。
因此,我想在構造函數中執行,我應該在@PostConstruct方法中做? – 2015-04-01 06:10:16
是的,它會在豆的建造之後被調用 – 2015-04-01 08:34:43
你是什麼意思與*事件Spring會發現B組件,A類字段將爲空*?這不是真的。你在這裏有什麼具體問題?看起來你想/需要在創建'A'的實例時使用'B'來觸發某種方法。 – 2015-03-30 21:24:01
爲什麼該字段爲空?我在這裏錯過了什麼? – zerocool 2015-03-30 21:24:43
我個人更喜歡自動裝配構造函數。如果僅僅因爲我可以從我的單元測試中更容易地嘲笑它。但在實際的應用程序中,使用構造函數自動裝配和直接自動裝配實際變量應該沒有區別。 – Ractoc 2015-03-30 21:30:51