gpt4 book ai didi

java - 在 Spring 中覆盖 beans 的最佳方法

转载 作者:行者123 更新时间:2023-12-02 04:01:09 25 4
gpt4 key购买 nike

我有一个由 2 个模块组成的应用程序。

第一个是主要模块,无需安装第二个模块即可工作。

我在主模块的 beans.xml 文件中定义了具有默认实现的 bean。当安装第二个模块时,我想保留这些 bean 的 id,但更改实现以使用新类。

最好的方法是什么?

第一个模块的

beans.xml:

...
<bean id="myCoolService" class="com.blabla.defaultCoolServiceImpl">
...

安装第二个模块后,我想使用第二个模块中定义的 myCoolService 实现。

更新:Spring版本是3.2.4。我需要进行尽可能少的更改,因此我需要继续使用 xml 驱动的配置。

最佳答案

实现此目的的一种方法是引入一个通用接口(interface)(我想应该已经存在):

public interface MyInterface {
//...
}

然后在主模块中用@Service注释默认实现

@Service
public class DefaultImplementation implements MyInterface {
//...
}

然后,如果您的某个模块需要覆盖此实现,请使用@Primary-注释:

@Service
@Primary
public class OverridingImplementation implements MyInterface {
//...
}

然后,下面的代码:

@Inject
private MyInterface myInterface;

如果未扫描到OverridingImplementation,则注入(inject)DefaultImplementation;如果扫描到OverridingImplementation,则注入(inject)OverridingImplementation(不会提示多个bean)。

关于java - 在 Spring 中覆盖 beans 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34875773/

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