在Spring Boot中使用applicationContext.getBean()方法的好处

时间:2019-05-28 06:16:48

标签: spring-boot

来自帖子: What does getBean() method do here?

我试图通过使用带有必需XML配置的getBean方法来获取“ id” d bean的实例(而不是使用来创建所需的实例)来了解spring-boot的“增值”作用

Class x = new Class(); 

何时需要?

1 个答案:

答案 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");

Go through this link for more reference and examples.