如果@Bean不能通过初始化失败,该如何配置?

Dimitrios K.

我有一些用于初始化Google身份验证的代码IdTokenProvider(对象的类型与我的问题无关)。但是,鉴于我的应用程序的当前状态,如果提供者未能初始化,这还不是世界末日。例如:

@Configuration
public class GoogleConfiguration {

  @Bean
  public IdTokenProvider idTokenProvider() {
    // this can throw
    return GoogleAuthUtils.getIdTokenProvider();
  }
}

@RequiredArgsConstructor
public class SomeConsumer {

  private IdTokenProvider idTokenProvider;

  @Autowired(required = false)
  public void setIdTokenProvider(IdTokenProvider idTokenProvider) {
    this.idTokenProvider = idTokenProvider;
  }

  //...magic
}

一种可行的解决方案(有效)是包装抛出代码并返回null,例如

@Slf4j
@Configuration
public class GoogleConfiguration {

  @Bean
  public IdTokenProvider idTokenProvider() {
    try {
      return GoogleAuthUtils.getIdTokenProvider();
    } catch (Exception e) {
      log.error("Failed to create an 'IdTokenProvider'", e);
      return null;
    }
  }
}

退还null是一个好模式我相信spring注册了bean,但它的值实际上null是的实例,而不是的实例IdTokenProvider如果实例化失败,是否可以避免注册Bean?

曼努蒂

基于Spring 5如何处理空Bean的变更?,Spring 5将不会注册(空)bean。由于您的代码将其视为可选内容,因此可以正常工作。

您可能需要考虑创建条件Bean,仅在身份验证提供程序有效时(成功案例)注册Bean。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么类数据成员不能通过直接初始化语法初始化?

为什么我不能通过 FindViewById 方法初始化 VideoView 对象?

为什么不能通过初始化的参数推断出通用结构类型?

初始化失败时如何还原配置设置

为什么我们不能通过未初始化的局部变量访问静态内容?

为什么我不能通过Groovy中的构造函数内部的闭包来初始化最终类变量?

如何通过Mockito初始化Servlet配置

Android上的TextToSpeech初始化-如果失败,该怎么办?

配置系统初始化失败

Spring bean通过方法初始化

如果数据库连接失败,如何防止Hikari Pool初始化失败

该变量将如何初始化?

如果不先初始化向量,该如何处理向量?

Kotlin初始化:如何失败

如何配置Fish shell初始化?

如果用常量初始化,@State 变量不能更改

如何在Spring 4中通过注释设置默认的bean初始化方法?

仅在通过getBean()获得时,如何让Spring初始化“原型” bean?

通过调用该方法,如果我已经用结构体数组的初始化创建了构造函数?

如果失败,Kotlin 对象需要再次初始化

初始化常量变量,如果失败则断言(C ++)

初始化新的TcpClient时出现“配置系统初始化失败”

配置系统初始化失败-设置设计器

初始化并通过

通过http调用获取配置后如何在angular 7中动态初始化Firebase

如何通过URL中的变体ID初始化可配置的产品详细信息

通过字符串初始化 documentReference 失败

PayPal 付款初始化通过 Cybersource 失败

如果已经初始化,则通过shell重新初始化rbenv