【发布时间】:2014-12-19 15:08:30
【问题描述】:
我想使用@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,但没有任何乐趣。
【问题讨论】:
-
以什么 bean 为条件?名字?类型?您在
@ConditionalOnMissingBean中遗漏了匹配的部分。 -
它默认为它所装饰的
@Bean的类型。
标签: java spring spring-boot