如果没有Web层,因此没有HTTP会话,CDI是否有意义?

Mr.*_*art 7 java cdi java-ee-6 ejb-3.1

新的JSR 299"Java EE的上下文和依赖注入"似乎基于"范围"的概念.

创建bean并将其与受支持的Scope之一相关联:Application,Session(映射到HTTP会话),Conversation和Request.

如果没有HTTP会话(例如,通过EJB远程公开功能的企业应用程序),使用CDI是否有意义,因为托管Bean不会与任何上下文相关联(因为它们不存在)?

在这种情况下甚至可以使用CDI吗?它会带来哪些优势?

Pio*_*cki 3

这让我想起了我自己不久前问过的问题:@SessionScoped 如何与 EJB 一起工作?CDI 仅适用于 Web 层吗?

似乎“范围”的概念仅在 HTTP 会话的情况下才相关。
然而,我可以看到有效使用范围@ApplicationScoped作为实现应用程序单例 bean 的一种方式,无论请求是否是 HTTP 请求。

Javadoc说:

有效应用范围:

(...)

  • 在任何 Java EE Web 服务调用期间,

  • 在任何 EJB 的任何远程方法调用期间、在任何 EJB 的任何异步方法调用期间、在对 EJB 超时方法的任何调用期间以及在消息传递到任何 EJB 消息驱动 bean 期间,