2011-02-26 84 views
1

我正在閱讀Spring文檔,我偶然發現了一段讓我思考的文本。ApplicationContext和bean檢索

您使用getBean()來檢索bean的實例。 ApplicationContext接口還有其他一些檢索bean的方法,但理想情況下,應用程序代碼不應該使用它們。事實上,你的應用程序代碼根本不應該調用getBean()方法,因此完全不依賴於Spring API。

嗯,我在我的xml文件中配置了bean。但我仍然需要在需要時檢索它們。如何在沒有getBean()方法的情況下做到這一點?更詳細的解釋越好。

+0

典型用法是一個web應用程序,不需要getBean。例如,請參閱mvc上的春季第13章。要製作命令行程序,您可以使用getBean ... – Kevin 2011-02-26 08:01:51

+0

是的。我知道了。謝謝,凱文。 – 2011-02-26 08:06:06

回答

0

當你想從非Spring創建的類訪問它們時需要一些方法來檢索Spring bean,例如,命令行程序中的主要類,並且您使用getBean方法。

但以春豆本身並很少需要這個功能,因爲它是春天的責任提供了所需要的其他bean,通過構造函數參數或setter方法(這是背後依賴注入的基本概念)。

0

其基本思想是「不要打電話給我們,我們會打電話給你」,這意味着你的代碼不會詢問bean的Spring IOC(Inversion of Control)容器,而是容器注入bean進入你的代碼。注射配置使用XML配置文件或通過註釋。有關更多詳細信息,請參閱例如thisthis。另外,我建議閱讀參考手冊中的第3章(正如​​你可能正在做的那樣)。

ApplicationContext接口仍然可以以編程方式請求bean,這在某些特殊情況下可能需要,例如與其他框架等進行集成時。

0

前段時間我寫了一些可處理不同輸入文件格式的通用解析器。

class XmlFormat extends Format { 
    // format stuff 
    // ... 
} 

class Parser { 
    Format format; 

    public Parser(Format format) { 
     this.format = format; 
    } 

    // parsing goes here 
    // ... 
} 

接下來我告訴了Spring要使用哪種格式描述。 (免責聲明:您的Spring配置可以有一個非常不同的風格)

<bean id="forma1" class="com.mycompany.XmlFormat" /> 

<bean id="parser" class="com.mycompany.Parser"> 
    <constructor-arg ref="format1"> 
</bean> 

所以,現在當我想春天給我Parser,它注入XmlFormat到構造我。

相關問題