簡體   English   中英

如何在基於Maven項目的Maven項目中使用基於運行時配置文件的多個模塊正確覆蓋bean?

[英]How to properly override beans with Spring in Maven Projects with multiple modules based on runtime profiles?

假設我在application-context.xml有一個bean:

<bean id="foo" class="biz.tugay.FooImpl" />

我有另一個模塊,假設模塊轟的一聲application-context-thud.xml我也會有:

<bean id="foo" class="biz.tugay.thud.ThudFooImpl" />

因此,當我在激活配置文件biz.tugay.thud.FooImpl運行應用程序時,Bean foo將被biz.tugay.thud.FooImpl覆蓋。 到目前為止,一切正常。

但是可以說我想要的是這樣的:

package biz.tugay

class FooImpl{
    void foo(){// Lots of code here};
}

在覆蓋的bean中,我要做的是:

package biz.tugay.thud

class ThudFooImpl{
    void foo(){
        if(something..) return;
        else {
            // Lots of code here
        }
    };
}

所以我現在要做的是:

package biz.tugay.thud

import biz.tugay.FooImpl

class ThudFooImpl extends FooImpl{
    void foo(){
        if(something..) return;
        else {
            super.foo();
        }
    };
}

但是問題是,如果FooImpl具有依賴項,那么我也必須將依賴項注入ThudFooImpl 但是從代碼中可以看到,我什至不需要ThudFooImpl那些依賴ThudFooImpl 。我所擁有的只是一個簡單的if檢查。

因此,xml文件中的代碼將如下所示:

 <bean id="foo" class="biz.tugay.Foo">
    <constructor-arg ref="waldo"/>
    <property name="baz" ref="baz"/>
    <property name="qux" ref="qux"/>
    <property name="quux" ref="quux"/>
    <property name="corge" ref="corge"/>
</bean>

<bean id="foo" class="biz.tugay.thud.ThudFooImpl">
    <constructor-arg ref="waldo"/>
    <property name="baz" ref="baz"/>
    <property name="qux" ref="qux"/>
    <property name="quux" ref="quux"/>
    <property name="corge" ref="corge"/>
</bean>

看起來我在這里做錯了什么?

有什么方法可以覆蓋bean,而無需將所有依賴項注入到子類bean中嗎?

我不能說我記得自己在實踐中使用過它,但我認為它可能是您要查找的parent屬性:

春季文檔
Mkyong教程

使用您的條款的未經測試的示例:

<bean id="foo" class="biz.tugay.Foo">
  <constructor-arg ref="waldo"/>
  <property name="baz" ref="baz"/>
  <property name="qux" ref="qux"/>
  <property name="quux" ref="quux"/>
  <property name="corge" ref="corge"/>
</bean>

<bean id="thudFoo" class="biz.tugay.thud.ThudFooImpl" parent="foo"/>

我希望這不會完全起作用,我沒有一個可以輕松對其進行測試的項目,但是希望與文檔一起可以為您提供一些幫助...

您可以使ThusFooImpl通過組合而不是繼承擴展FooImpl 它們都應實現Foo接口,並且您可以將FooImpl的實例注入ThudFooImpl 然后從FooImplif語句的第二個分支中調用注入的ThudFooImpl

使用 &#39;

[英]Using '<import resource=' on multiple beans profiles in spring?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM