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

标签 java xml spring inheritance applicationcontext

也许问题不太清楚,但举个例子,我想我会清楚的。在我的项目中,我有两种测试:集成测试和场景测试。它们都需要一个数据源(带有自定义的 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。这是一个很难用谷歌搜索的问题,这就是为什么我在这里问它。希望有人能给出解决方案。

最佳答案

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

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

<import resource="context.xml" />

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

这能回答你的问题吗?

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

相关文章:

java - Spring MVC错误通过字段表达的依赖关系不满足

java - 为什么在我的 java 程序中没有正确处理这个异常?

java - JLabel到JPanel,拖放

java - ANT 文件集包含在所有文件系统中

xml - 更正 Doxygen XML 输出中的错误

html - 如何在 Jenkins/JUNIT xml 中的 <system-out> 或 <failure> 标签中添加 href 链接

java - 使用 Java 邮件服务器进行测试

c# - 使用编码从 XML 字符串中获取字节数组

spring - 使用 spring boot 写入文件属性

java - 使用 Spring WS 获取 SOAP header 的内容