所以,让我们说application-context.xml
中有一个bean:
<bean id="foo" class="biz.tugay.FooImpl" />
我还有另一个模块,让我们说模块 thud ,在application-context-thud.xml
我也会有:
<bean id="foo" class="biz.tugay.thud.ThudFooImpl" />
因此,当我运行我的应用程序并激活配置文件时,将使用biz.tugay.thud.FooImpl
覆盖bean foo。到目前为止一切都还可以。
但是让我说我想要的就是这样:
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
中的那些依赖项。如果检查,我只需要一个简单的。
因此代码在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?
答案 0 :(得分:0)
我不能说我记得在练习中自己使用它,但我认为它可能是您正在寻找的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"/>
我希望这不会完全正常工作,我没有一个项目可以轻松地测试它,但希望与文档一起,它将为您提供一些方法......
答案 1 :(得分:0)
您可以通过合成而不是继承来ThusFooImpl
扩展FooImpl
。
它们都应该实现Foo
接口,并且可以将FooImpl
的实例注入ThudFooImpl
。然后从FooImpl
中if
语句的第二个分支调用注入的ThudFooImpl
。