【发布时间】:2021-03-04 07:07:55
【问题描述】:
使用具有两个 bean 实现的接口。 一种实现有条件。
我希望它们是互斥的,从而产生单个 bean 实现接口。
尝试了以下导致缺少 bean 的方法:
interface BaseService {}
@Service
@ConditionalOnProperty(...)
class ConditionalService implements BaseService{}
class FallbackService implements BaseService {}
@Configuration
class MyConfiguration {
@Bean
@ConditionalOnMissingBean
public BaseService fallbackService() {
return new FallbackService();
}
}
被拒绝的 github 问题和示例 repo:https://github.com/spring-projects/spring-boot/issues/24227
【问题讨论】:
-
我试了一下,但如果您指定
@ConditionalOnProperty中的参数类型会有所帮助。对于类似的问题,可能还值得看看this answer。 -
@MikaelF 在我的测试用例中,
@ConditionalOnProperty将失败,因此不应创建 bean,应使用回退。最终结果是没有创建 bean。 -
查看你的仓库,没有
@ConditionalOnProperty,因为主要实现是用@ConditionalOnBean定义的。 Spring Boot 人员向您展示了为什么这不起作用。@Conditional...注释用于自动配置类。您是否在寻求帮助设置其中之一? -
@MikaelF 是的,请提供使用自动配置的示例
标签: spring spring-boot