2013-07-02 49 views
0

我有一個類如下。春天有一些內置的工廠實施?

public class MyClass { 


    public void doSomething(){ 
     //B b = //some how get new instance of B each time when doSomething is called 
     //do it now 
    } 


} 

春天是否提供了一些東西內置這樣的東西? 或者我將不得不創建一個工廠,我會每次創建和返回工廠方法被調用?

回答

0

這是可能的,而且documented in the manual

在大部分情況下,大多數豆在容器內的單身人士。當單例bean需要與另一個單例bean協作,或者非單例bean需要與另一個非單例bean協作時,通常通過將一個bean定義爲另一個bean的屬性來處理依賴。當bean生命週期不同時會出現問題。假設單例bean A需要使用非單例(原型)bean B,可能在A上的每個方法調用上。容器只創建一次單例bean A,因此只有一次機會來設置屬性。每次需要時,容器都不能向bean A提供bean B的新實例。

解決方案是放棄一些控制反轉。您可以通過實現ApplicationContextAware接口來讓bean A知道容器,並且每當bean A需要時,通過對容器的getBean(「B」)調用請求(通常是新的)bean B實例。

[...]

Lookup方法注入容器的覆蓋受容器管理的bean方法,返回查找結果在容器中其他的bean的能力。查找通常包含一個原型bean,如前一節所述。 Spring Framework通過使用CGLIB庫中的字節碼生成來動態生成覆蓋該方法的子類,從而實現了此方法注入。