Java 在测试期间更改许多SpringBean的范围

Java 在测试期间更改许多SpringBean的范围,java,spring,testing,Java,Spring,Testing,我正在使用spring(SpringJUnit4ClassRunner和@ContextConfiguration)运行测试。这些测试是并行运行的。 我的一些bean是单例的,我想将它们更改为测试的范围“线程”。我希望每个测试都有自己的bean实例 我已经通过一个applicationContext.xml文件和一个用于测试的applicationTestContext.xml文件实现了这一点。 在applicationTestContext.xml中,我使用范围“thread”定义这些bean

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

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

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

收集所有要自定义其作用域的bean,并将它们放在一个单独的bean配置文件中,该文件包含在
applicationContext
applicationTestContext
中,例如

<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>

threadOrSingleton=螺纹

您的应用程序是单线程应用程序吗?如果没有,这些bean也会在你的应用程序中并行使用,因此也应该能够在你的测试中并行使用。或者我遗漏了什么?测试会在安装和拆卸时重置bean的状态。这对测试很有用,但不是应用程序中发生的事情。这就是为什么我不希望测试共享同一个实例。