如果应用程序在给定的配置文件上运行,则覆盖并扩展Bean

时间:2019-10-15 03:32:07

标签: spring spring-boot spring-bean

所以,假设我已经用@Service注释了主bean,该@Bean被注入了@Autowired的另一个服务中。

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

当我使用另一个配置文件fg运行时,我想扩展此服务。 (“自定义”)。因此,我的服务如下:

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

但是我遇到了这个异常:

  

由以下原因引起:org.springframework.context.annotation.ConflictingBeanDefinitionException:Bean类[MainService]的由注释指定的bean名称'mainService'与同名和类[CustomService]的现有,不兼容的bean定义发生冲突

您知道我如何以相同的名称扩展和覆盖bean吗?这是因为我需要将其自动布线到其他地方

1 个答案:

答案 0 :(得分:0)

您可以使用配置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();
    }

}