提问者:小点点

如果应用程序在给定配置文件上运行,则重写和扩展bean


因此,假设我的主要 bean 带有注释@Service,该 bean 被注入到另一个具有 @Autowired 的服务中。

@Service
@Order(100)
class MainService() {
   fun helloWorld() = "Hello"
}

我想在使用另一个配置文件fg运行时扩展此服务。(“自定义”)。所以我有如下服务:

@Service("mainService")
@Order(1)
class CustomService: MainService() {
    override fun helloWorld() = "Hello custom"
}

但我有一个例外:

原因:org . spring framework . context . Annotation . conflictingbean definitionexception:bean类[MainService]的批注指定的bean名称“mainService”与现有的、不兼容的同名和类[CustomService]的bean定义冲突

你知道我如何扩展和覆盖同名的 bean 吗?这是因为我需要在其他地方自动连接它


共1个答案

匿名用户

您可以使用配置bean来执行此操作:

@Configuration
@Profile("dev")
public class MainServiceDev {

    @Bean
    public MainService mainService() {
        return new MainService();
    }

}

@Configuration
@Profile("custom")
public class MainServiceCustom {

    @Bean
    public CustomService customService() {
        return new CustomService();
    }

}