1

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

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

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

4

3 回答 3

0

基本思想是“不要打电话给我们,我们会打电话给你”,这意味着您的代码不会向 Spring IOC(控制反转)容器询问 bean,而是容器将 bean 注入您的代码中。使用 xml 配置文件或通过注释配置注入。有关更多详细信息,请参见例如thisthis。另外,我建议您阅读参考手册中的整个第 3 章(就像您可能正在做的那样)。

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

于 2011-02-26T11:59:57.037 回答
0

当您想从不是由 Spring 创建的类(例如命令行程序中的主类)中访问 Spring bean 时,您需要某种方法来检索它们,并且您为此使用 getBean 方法。

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

于 2011-02-26T12:05:30.207 回答
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为我注入了构造函数。

于 2011-02-26T12:27:28.710 回答