gpt4 book ai didi

java - 如何根据运行时配置文件在具有多个模块的 Maven 项目中使用 Spring 正确覆盖 Bean?

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:23 26 4
gpt4 key购买 nike

假设我在 application-context.xml 中有一个 bean:

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

我还有另一个模块,比如说模块thud,在application-context-thud.xml中我还将有:

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

因此,当我在激活配置文件 thud 的情况下运行应用程序时,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 有依赖项,我也必须将依赖项注入(inject)到 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,而不需要将所有依赖项注入(inject)子类化 Bean?

最佳答案

我不能说我记得自己在实践中使用过它,但我认为它可能是您正在寻找的parent属性:

Spring docs
Mkyong tutorial

使用您的术语的未经测试的示例:

<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"/>

我预计这不会完全起作用,我没有一个可以轻松测试它的项目,但希望与文档一起可以帮助您......

关于java - 如何根据运行时配置文件在具有多个模块的 Maven 项目中使用 Spring 正确覆盖 Bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34131172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com