1

質問はそれほど明確ではないかもしれませんが、例を挙げれば、私はそれを明らかにすると思います。私のプロジェクトには、統合テストとシナリオテストの2種類のテストがあります。どちらもデータソースが必要です(カスタムメイドの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シナリオテストケースでそれを試しました(一度trueでlazy-initを使用)、次のようになります:

<bean class="org.springframework.context.support.ClassPathXmlApplicationContext">
    <constructor-arg>
        <list>
            <value>classpath:overridingTestContext.xml</value>
        </list>
    </constructor-arg>
</bean>

dataSourceしかし、彼はシナリオコンテキストでを作成しません。これはグーグルするのが非常に難しい問題です、それで私はここでそれを尋ねています。私は誰かが解決策を持っていることを願っています。

4

1 に答える 1

2

Springは、複数のappicationcontextsを組み合わせることができ、同じIDを持つBeanを1つだけ許可することで、継承に類似したモデルを提供します。2つのBeanが同じIDを共有する場合、後者は前者をオーバーライドします。

したがって、たとえば、を使用して、必要な構成を適切な順序で簡単にインポートできます。

<import resource="context.xml" />

ただし、動作はsetAllowBeanDefinitionOverridingの値に依存します 。デフォルトはtrue。です。

これはあなたの質問に答えますか?

于 2011-05-13T07:04:54.010 に答える