我正在阅读Spring文档,我偶然发现了一段让我思考的文本。
使用getBean()来检索bean的实例。 ApplicationContext接口有一些其他方法可以检索bean,但理想情况下,您的应用程序代码绝不应该使用它们。实际上,您的应用程序代码根本不应该调用getBean()方法,因此根本不依赖于Spring API。
好吧,我在我的xml文件中配置了bean。但我仍然需要在需要时检索它们。如果没有getBean()方法,我怎么能这样做?更详细的解释越好。
答案 0 :(得分:0)
基本思想是“不要打电话给我们,我们会打电话给你”,这意味着你的代码不会向bean提出Spring IOC(Inversion of Control) - 容器,而是容器将bean注入你的代码。使用xml-configuration文件或通过注释配置注入。有关详细信息,请参阅示例this和this。另外,我建议您阅读参考手册中的第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
注入构造函数中。