java - 在测试期间更改许多 Spring bean 的范围

标签 java spring testing

我正在使用 spring (SpringJUnit4ClassRunner 和 @ContextConfiguration)运行测试。测试是并行运行的。 我的一些 bean 是单例的,我想将它们更改为测试的“线程”范围。我希望每个测试都有自己的 bean 实例。

我已经通过使用 applicationContext.xml 文件和用于测试的 applicationTestContext.xml 文件来实现它。 在 applicationTestContext.xml 中,我定义了范围为“thread”的 bean。

这样做的问题是,每次我们添加该类型的新 bean 时,我们都必须将其添加到 applicationContext.xml 和 applicationTestContext.xml 中,这非常烦人。 有没有办法用更少的样板来做到这一点?

最佳答案

收集您想要自定义范围的所有 bean,并将它们放入单独的 bean 配置文件中,包括来自 applicationContextapplicationTestContext,例如

<import resource="customScopedBeans.xml"/>

然后使用范围占位符

<bean class="com.Foo" scope="${threadOrSingleton}" />

并在父配置文件中以不同方式声明属性。

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="properties">
      <value>threadOrSingleton=thread</value>
  </property>
</bean>

关于java - 在测试期间更改许多 Spring bean 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8952983/

相关文章:

JAVA Arraylist 意外输出

java - @ModelAttribute Spring MVC 多重选择不设置ArrayList

visual-studio - 运行 .webtest 测试结果为 ".webtest is not a valid extension"

Laravel 代理作为客人

java - 使用JUnit测试一个反转单向链表的方法

java - 使用 JAXB 注释外部库中的对象

java - 无法使用 HashMap 设置图像

java - Android CardView 动画不正确

java - Spring @Value 注解无法解析

java - 如何 Autowiring 具有多个实现的接口(interface)