ApplicationContext和bean检索

时间:2011-02-26 06:55:38

标签: java spring applicationcontext

我正在阅读Spring文档,我偶然发现了一段让我思考的文本。

  

使用getBean()来检索bean的实例。 ApplicationContext接口有一些其他方法可以检索bean,但理想情况下,您的应用程序代码绝不应该使用它们。实际上,您的应用程序代码根本不应该调用getBean()方法,因此根本不依赖于Spring API。

好吧,我在我的xml文件中配置了bean。但我仍然需要在需要时检索它们。如果没有getBean()方法,我怎么能这样做?更详细的解释越好。

3 个答案:

答案 0 :(得分:0)

基本思想是“不要打电话给我们,我们会打电话给你”,这意味着你的代码不会向bean提出Spring IOC(Inversion of Control) - 容器,而是容器将bean注入你的代码。使用xml-configuration文件或通过注释配置注入。有关详细信息,请参阅示例thisthis。另外,我建议您阅读参考手册中的第3章(正如​​您可能正在做的那样)。

ApplicationContext接口仍然可以以编程方式请求bean,在某些特殊情况下可能需要这些bean,例如与其他框架集成时。

答案 1 :(得分:0)

如果要从不是由Spring创建的类访问Spring bean,需要一些方法来检索Spring bean,例如命令行程序中的主类,并为此使用getBean方法。

但Spring bean本身很少需要这个功能,因为Spring负责通过构造函数参数或setter方法提供所需的其他bean(这是依赖注入背后的基本思想)

答案 2 :(得分: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>

所以现在当我希望Spring给我一个Parser时,它会将XmlFormat注入构造函数中。