在 JSR 330 中,@Inject是否可以设置为可选(如 @Autowire(required=false)?

2022-09-01 12:31:28

Spring's可以配置为,如果没有找到匹配的自动布线候选项,Spring不会抛出错误:@Autowire@Autowire(required=false)

是否有等效的 JSR-330 注释? 如果没有匹配的候选项,则始终失败。是否有任何方法可以使用,但如果找不到匹配的类型,则不使框架失败?我无法找到任何达到这种程度的文档。@Inject@Inject


答案 1

您可以使用 .如果您使用的是Java 8,并且您的Spring版本为或更高(请参阅此处),而不是java.util.Optional4.1

@Autowired(required = false)
private SomeBean someBean;

你可以只使用 Java 8 附带的类。像这样使用它:java.util.Optional

@Inject
private Optional<SomeBean> someBean;

此实例永远不会是 ,您可以像这样使用它:null

if (someBean.isPresent()) {
   // do your thing
}

通过这种方式,您还可以进行构造函数注入,需要一些bean,一些bean是可选的,这提供了很大的灵活性。

注意:不幸的是,Spring不支持Guava的(见这里),所以只有当你使用Java 8(或更高版本)时,这种方法才有效。com.google.common.base.Optional


答案 2

不。。。在 JSR 330 中没有可选的等效项...如果你想使用可选的注入,那么你将不得不坚持使用框架特定的注释@Autowired


推荐