2015-03-30 45 views
2

如果我們說我有一個類A(@Component)和一個類B(@Component)。類A需要B的實例。如果我使用@Autowired將類B作爲A中的字段,即使Spring將找到B組件(通過@ComponentScan),類A字段也將爲空。但是,如果我在A的構造函數中將B作爲參數並使用@Autowired註釋構造函數,則它將完美工作。Spring只能註冊構造器bean嗎?

有沒有什麼辦法可以從A的構造函數中排除B

+0

你是什麼意思與*事件Spring會發現B組件,A類字段將爲空*?這不是真的。你在這裏有什麼具體問題?看起來你想/需要在創建'A'的實例時使用'B'來觸發某種方法。 – 2015-03-30 21:24:01

+0

爲什麼該字段爲空?我在這裏錯過了什麼? – zerocool 2015-03-30 21:24:43

+0

我個人更喜歡自動裝配構造函數。如果僅僅因爲我可以從我的單元測試中更容易地嘲笑它。但在實際的應用程序中,使用構造函數自動裝配和直接自動裝配實際變量應該沒有區別。 – Ractoc 2015-03-30 21:30:51

回答

1

由於@LuiggiMendoza提到:創建@PostConstruct方法很簡單:你只應@PostConstruct註解你的方法:

public class A { 
    @PostConstruct 
    void init(){ 
     //do smth here 
    } 
} 

或者,如果您使用XML配置,你可以init-method參數添加到您的bean定義。

+0

因此,我想在構造函數中執行,我應該在@PostConstruct方法中做? – 2015-04-01 06:10:16

+0

是的,它會在豆的建造之後被調用 – 2015-04-01 08:34:43