2014-02-27 50 views
0

我剛剛閱讀了關於構造函數和setter依賴注入的Spring文檔。 但是,DI的整個概念仍然讓我困惑不已。特別是,這個過程似乎仍然相當有限或受限於我。Spring重新注入概念

我明白第三方(Spring)的想法,它可以完全分配和連接對象的依賴關係。但是如果我們只通過構造函數(初始化時間)和設置器(初始化然後做一些屬性設置)來提供依賴關係,那麼我們以後如何重新配置​​或重新注入新的bean?

我的意思是例如豆A有豆的參考B。通過構造函數或setter注入,我們可以像從文檔中知道的那樣執行操作。但是如果後來在應用程序中我們需要bean A來獲得對其他對象/ bean C的引用呢?

我們是否需要從新的Spring XML配置文件或其他方法加載新的應用程序上下文?該操作可能會執行多次,所以它應該很容易配置。有一件事我很驚訝,在Spring DI的大多數教程和解釋中都沒有提到這樣的常見任務。也許我需要其他關鍵字(目前我正在使用Spring重新注入)。

回答

0

您可以在

private ApplicationContext context; 

public void setApplicationContext(ApplicationContect context) { 
    this.context = context; 
} 

注入的ApplicationContext,那麼你將有權在任何時候

... 
    C c =context.getBean(C.class); 
... 
0

訪問任何豆無論你在你的應用程序需要的ApplicationContext,實現與ApplicationContextAware接口類。

這裏說

public class CalenderService implements ApplicationContextAware{ 

    private ApplicationContext context;//declare this so you can use it 

} 

因爲它是你需要在此改變其方法

public void setApplicationContext(ApplicationContext context){ 
    this.context=context; // here ApplicationContext gets injected. 
} 

,並使用此背景下,無論你想接口。

0

上下文驅動的框架如Guice,HK2或CDI傾向於在注入服務時使用代理服務,這些服務的生命週期與注入服務的生命週期不同。然後,當服務在代理下發生變化時,代理只查找新實例並將其用於後續調用。還有其他的原因,像這樣的框架使用代理,例如爲了避免昂貴的初始化成本的服務。