来自帖子: What does getBean() method do here?
我试图通过使用带有必需XML配置的getBean方法来获取“ id” d bean的实例(而不是使用来创建所需的实例)来了解spring-boot的“增值”作用
Class x = new Class();
何时需要?
答案 0 :(得分:1)
首先,有些applicationContext.getBean()被认为是不好的。因为
调用ApplicationContext.getBean()
并不是控制反转!尽管更改给定bean名称配置的实现仍然很容易,但该类现在直接依靠Spring来提供该依赖关系,而无法以其他任何方式获取它。您不能只是在测试类中创建自己的模拟实现并将其自己传递给它。这基本上违反了Spring作为依赖项注入容器的目的。
每个您想说的地方:
MyClass myClass = applicationContext.getBean("myClass");
例如,您应该声明一个方法:
public void setMyClass(MyClass myClass) {
this.myClass = myClass;
}
然后在您的配置中:
<bean id="myClass" class="MyClass">...</bean>
<bean id="myOtherClass" class="MyOtherClass">
<property name="myClass" ref="myClass"/>
</bean>
然后,Spring会自动将myClass
注入myOtherClass
中。
以这种方式声明所有内容,并且在其根本处都有类似的内容:
<bean id="myApplication" class="MyApplication">
<property name="myCentralClass" ref="myCentralClass"/>
<property name="myOtherCentralClass" ref="myOtherCentralClass"/>
</bean>
MyApplication
是最核心的类,至少间接依赖于程序中的所有其他服务。引导时,在您的主要方法中,您可以调用applicationContext.getBean("myApplication")
,但您无需在其他任何地方调用getBean()
!
您唯一应避免的是实例化ApplicationContext
。只做一次!换句话说,只需在您的应用程序中仅使用下面的代码行一次即可。
ApplicationContext context = new ClassPathXmlApplicationContext("AppContext.xml");