我想使用@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
时)没有定义的顺序。