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