spring 注解@ConditionalOnMissingBean 有什么作用?

新手上路,请多包涵

我正在尝试启动一个已使用此注释的 springboot 应用程序。当我尝试启动应用程序时,出现以下错误:

org.springframework.boot.autoconfigure.condition.OnBeanCondition$BeanTypeDeductionException 无法推断 com.shutterfly.sbs.platform.SbsPlatformConfigurationClientConfig.getRestTemplate 的 bean 类型

代码:

 @ConditionalOnMissingBean
@Bean
public RestTemplate getRestTemplate() {
    return new RestTemplate();
}

原文由 Ravi Wadje 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 540
1 个回答

@ConditionalOnMissingBean 注释仅在给定的 bean 丢失时才用于加载 bean:

 @Bean
@ConditionalOnMissingBean(SomeBean.class)
public SomeBean otherBean(){
    return new SomeBean();
}

只有在上下文中不存在该类型的其他 bean 时,上面的 bean 才会被 Spring 加载。另一方面,如果应用程序上下文中已经存在 SomeBean 类型的 bean,则不会创建上述 bean。

此注释派上用场的一些用例是:

  • 指定一个后备 bean,如果不存在相同类型的 bean,该 bean 仅作为备份加载(例如:如果没有配置真实数据库,则使用内存数据库)
  • 指定一个默认 bean,它允许在上下文中存在更具体的相同类型的 bean 的情况下被覆盖(例如:使用默认身份验证机制,除非有人决定用他自己的自定义身份验证替换它)

参考: https ://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html

原文由 Marko Previsic 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题