我想使用@ConditionalOnMissingBean启用自定义配置和合理的默认值吗?
我有一个Spring Boot应用程序:

@Configuration
@Import({CustomConfiguration.class, DefaultConfiguration.class})
@EnableAutoConfiguration(exclude={MetricFilterAutoConfiguration.class})
public class Application {

    @Autowired
    ErrorListener errorListener;
}

以及一个CustomConfiguration,它可以进行Spring xml或组件扫描:
@Configuration("customConfiguration")
@ImportResource("classpath:customContext.xml")
@ComponentScan({"org.custom.impl"})
public class CustomConfiguration
DefaultConfiguration使用ConditionalOnMissingBean:
@Bean
@ConditionalOnMissingBean
ErrorListener errorListener() {
     return new LoggingErrorListener();
}

我想要实现的是允许在类路径中定义自定义ErrorListener,如果未定义,则使用默认的LoggingErrorListener(通过ConditionalOnMissingBean)。我发现DefaultConfiguration始终在CustomConfiguration之前使用。

我一直在尝试@DependsOn@Order,但没有任何乐趣。

最佳答案

如果您是我,我不会在自动配置类之外使用@ConditionalOnMissingBean,除非您可以控制@Configuration类的导入顺序。自动配置会明确地执行此操作,但是普通的用户配置类(尤其是@ComponentSCanned时)没有定义的顺序。

09-25 23:10