@ConditionalOnMissingBean 不能被覆盖

tom*_*omi 6 spring-boot

我正在使用 Spring Boot 2.1.6.RELEASE,我想知道@ConditionalOnMissingBean应该如何使用?

示例配置:

@Configuration
public class MyAutoConfiguration {

  @Bean
  @ConditionalOnMissingBean
  public Foo foo() {
    return new Foo();
  }
}
Run Code Online (Sandbox Code Playgroud)
@Configuration
@Import(MyAutoConfiguration.class)
public class AppConfiguration {

  @Bean
  public Foo foo() {
    return new Foo("some property");
  }
}
Run Code Online (Sandbox Code Playgroud)

AppConfiguration.class并且MyAutoConfiguration.class在不同的模块中。

错误:

无法注册在类路径资源 [com/example/autoconf/configuration/AppConfiguration.class] 中定义的 bean 'foo'。具有该名称的 bean 已经在类路径资源 [com/my/configuration/MyAutoConfiguration.class] 中定义并且覆盖被禁用。

如何在@ConditionalOnMissingBean不设置spring.main.allow-bean-definition-overriding=true属性的情况下使用?

Bon*_*ond 1

为了MyAutoConfiguration被 Spring Boot 选择为自动配置,需要如下META-INF/spring.factories声明

org.springframework.boot.autoconfigure.EnableAutoConfiguration=x.y.z.MyAutoConfiguration 
Run Code Online (Sandbox Code Playgroud)

有关自定义自动配置的更多详细信息,请参阅此处