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

时间:2012-01-21 12:31:47

标签: java spring testing

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

我通过使用applicationContext.xml文件和用于测试的applicationTestContext.xml文件来实现这一目标。 在applicationTestContext.xml中,我定义了那些范围为“thread”的bean。

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

1 个答案:

答案 0 :(得分:3)

收集要自定义范围的所有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>