java - 是否可以将上下文注入(inject)另一个上下文?

标签 java xml spring inheritance applicationcontext

也许这个问题不是那么清楚,但是举个例子,我想我会清楚的。在我的项目中,我有两种测试:集成测试和场景测试。他们都需要一个数据源(带有一个定制的属性占位符)。

在集成测试用例的上下文中,只定义数据源和占位符,如下所示:

<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 试过了在我的场景测试用例中(一次使用延迟初始化为真),如下所示:
<bean class="org.springframework.context.support.ClassPathXmlApplicationContext">
    <constructor-arg>
        <list>
            <value>classpath:overridingTestContext.xml</value>
        </list>
    </constructor-arg>
</bean>

但他没有创建 dataSource在场景上下文中。这是一个很难用谷歌搜索的问题,这就是我在这里问它的原因。我希望有人有解决方案。

最佳答案

Spring 可以组合多个应用程序上下文,并通过只允许一个具有相同 id 的 bean 来提供类似于继承的模型。如果两个 bean 共享相同的 id,则后者将覆盖前者。

因此,您可以使用例如,以正确的顺序简单地导入您需要的配置,

<import resource="context.xml" />

然而,行为确实取决于
setAllowBeanDefinitionOverriding默认为 true .

这回答了你的问题了吗?

关于java - 是否可以将上下文注入(inject)另一个上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5988318/

相关文章:

java - 如何避免在多个地方对同一事物进行潜在的长 if 语句

spring - 在 Spring @PreAuthorize 中调用私有(private)方法

java - 手机支持Java Android吗?

java - 尝试通过应用程序发送电子邮件时出现问题

java - 从 github check out 代码到 netbeans/eclipse

python - UnicodeDecodeError : 'utf-8' codec can't decode byte 0xe2 in position 434852: invalid continuation byte

.net - 如何保证 XPath 'OR' 查询的节点顺序

html - XSL:包括根本不起作用

java - Spring/maven 多模块项目 : NoUniqueBeanDefinitionException

java - 在Eclipse Java中增加堆内存