如果@bean被接受为初始化失败,如何配置它?

evrscar2  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(400)

我有一些初始化google身份验证的代码 IdTokenProvider (对象的类型与我的问题无关)。然而,考虑到我的应用程序的当前状态,如果提供程序未能初始化,这并不是世界末日。例如:

  1. @Configuration
  2. public class GoogleConfiguration {
  3. @Bean
  4. public IdTokenProvider idTokenProvider() {
  5. // this can throw
  6. return GoogleAuthUtils.getIdTokenProvider();
  7. }
  8. }
  9. @RequiredArgsConstructor
  10. public class SomeConsumer {
  11. private IdTokenProvider idTokenProvider;
  12. @Autowired(required = false)
  13. public void setIdTokenProvider(IdTokenProvider idTokenProvider) {
  14. this.idTokenProvider = idTokenProvider;
  15. }
  16. //...magic
  17. }

一个可能的解决方案(有效)是 Package 抛出的代码并返回 null ,例如。

  1. @Slf4j
  2. @Configuration
  3. public class GoogleConfiguration {
  4. @Bean
  5. public IdTokenProvider idTokenProvider() {
  6. try {
  7. return GoogleAuthUtils.getIdTokenProvider();
  8. } catch (Exception e) {
  9. log.error("Failed to create an 'IdTokenProvider'", e);
  10. return null;
  11. }
  12. }
  13. }

回归是一种好的模式吗 null 豆。我相信spring注册了bean,但它的值实际上是 null 而不是 IdTokenProvider . 如果bean示例化失败,有没有办法避免注册它?

pkmbmrz7

pkmbmrz71#

基于Spring5处理空bean的方式的改变,Spring5将不注册(空)bean。因为您的代码将其视为可选的,所以它可以正常工作。
您可能需要考虑创建条件bean,以便仅在身份验证提供程序有效时注册bean(成功案例)。

相关问题