也许问题不是那么明确,但举个例子,我想我会清除它。在我的项目中,我有两种测试:集成测试和场景测试。他们都需要一个数据源(使用自定义的propertyplaceholder)。
在集成测试用例的上下文中,仅定义数据源和占位符,如下所示:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<bean id="propertyResolver" class="com.cegeka.bibliothouris.test.MultiThreadedPropertyResolver">
<property name="location"><value>classpath:testContext.properties</value></property>
</bean>
在我的方案测试用例上下文中,我也需要这些对象(以及其他一些东西),但我只是想在'我的场景上下文中创建一个集成上下文,所以某种继承。
我已经在我的方案测试用例中使用classPathApplicationContext
进行了尝试(一次使用lazy-init为true),如下所示:
<bean class="org.springframework.context.support.ClassPathXmlApplicationContext">
<constructor-arg>
<list>
<value>classpath:overridingTestContext.xml</value>
</list>
</constructor-arg>
</bean>
但他没有在场景上下文中创建dataSource
。这是一个很难谷歌的问题,这就是我在这里问的原因。我希望有人有解决方案。
答案 0 :(得分:2)
Spring可以结合多个appicationcontexts,并通过只允许一个具有相同id的bean来提供类似继承的模型。如果两个bean共享相同的id,后者将覆盖前者。
因此,您只需使用例如
按正确的顺序导入所需的配置<import resource="context.xml" />
然而,行为确实取决于的价值
setAllowBeanDefinitionOverriding,默认为true
。
这会回答你的问题吗?