当找不到要注入的 bean 时避免部署时异常

问题描述 投票:0回答:1

我有这个问题:我正在将应用程序 (.ear) 部署到 WebLogic/CDI,并且我的一门课程中有这个:

@Inject
@MyAnnotation
private IMyStuff stuff;

当然,如果在部署时没有找到带有此@MyAnnotation的bean,容器会抛出异常,并且不会部署应用程序。我怎样才能避免这种情况?我希望将“东西”设置为 null 并且应用程序部署无异常。

weblogic cdi inject
1个回答
0
投票

在部署时,您不能对 CDI 存在不满足的依赖关系。 所有注入点都必须是可解析的。 附带说明一下,这也适用于不明确的依赖关系 - 多个 bean 适合给定注入点的情况。

只有一种情况,bean 可能是

null
,即该 bean 是
@Dependent
并且有一个生产者[有条件地]返回
null
。但即使在这种情况下,该 bean 也存在于给定的注入点,碰巧它可能会返回
null
(老实说,这是一种非常罕见的情况)。

如果您同意该 bean 不存在,请不要显式声明它的注入点,而是使用编程查找(即

@Inject Instance<Object>
接口),您可以在请求之前检查此类 bean 是否存在。您还可以使用
CDI.current()
并从那里执行相同的操作。 但是,请注意,这种方式将销毁任何
@Dependent
作用域 bean 的责任转移到了作为用户的您身上,因为它们没有绑定到任何其他 bean。您也可以使用
Instance
接口来处理此类 bean。

最后但并非最不重要的一点是,我警告不要过度使用您所请求的模式,因为 CDI 设计用于在一组已知的 bean 上工作,并且验证实际上是一个很好的安全措施,可以让您知道您是否拥有所有您的应用程序可能请求的 bean。

© www.soinside.com 2019 - 2024. All rights reserved.