我正在使用spring(SpringJUnit4ClassRunner和@ContextConfiguration)运行测试。测试是并行运行的。 我的一些bean是单例,我想将它们更改为测试的范围“线程”。我希望每个测试都有自己的bean实例。
我通过使用applicationContext.xml文件和用于测试的applicationTestContext.xml文件来实现这一目标。 在applicationTestContext.xml中,我定义了那些范围为“thread”的bean。
这个问题是每次我们添加一个新类型的bean时,我们都要将它添加到applicationContext.xml和applicationTestContext.xml中,这非常烦人。 有没有办法用更少的样板来做到这一点?
答案 0 :(得分:3)
收集要自定义范围的所有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>