![](/img/trans.png)
[英]How to create multiple beans at runtime for different profiles in Spring Boot?
[英]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
屬性:
使用您的條款的未經測試的示例:
<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
。 然后從FooImpl
的if
語句的第二個分支中調用注入的ThudFooImpl
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.