我有一些用于初始化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] 删除。
我来说两句