java - 如果没有 Web 层并因此没有 HTTP session ,CDI 是否有意义?

标签 java java-ee-6 cdi ejb-3.1

新的 JSR 299“Java EE 的上下文和依赖注入(inject)”似乎是基于“作用域”的概念。

创建 bean 并将其关联到受支持的范围之一:应用程序、 session (映射到 HTTP session )、对话和请求。

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

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

最佳答案

这让我想起了我之前问过的问题:How does @SessionScoped work with EJB? Is CDI only for web-tier?

似乎“作用域”的概念只与 HTTP session 相关。
但是,我可以看到 @ApplicationScoped 范围的有效使用,作为实现应用程序单例 bean 的一种方式,尽管请求是 HTTP 请求。

Javadoc说:

The application scope is active:

(...)

  • during any Java EE web service invocation,

  • during any remote method invocation of any EJB, during any asynchronous method invocation of any EJB, during any call to an EJB timeout method and during message delivery to any EJB message-driven bean,

关于java - 如果没有 Web 层并因此没有 HTTP session ,CDI 是否有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016937/

相关文章:

jakarta-ee - EJB 3.1 |通过 JNDI 调用远程 session bean 时出错

java - 将 JBPM 5.3 部署到 JBoss 7.1.1 时出现警告

unit-testing - 如何使用 Jersey 测试框架启用 CDI?

java - 重用 ActionListener

java - 在 Android 中扩展 AlertDialog.Builder

带有装饰的javafx透明窗口背景

java - Spring - 我什么时候应该考虑在同一个 JVM 中加载另一个上下文?

java - 如何在生产中使用 CDI 测试类时注入(inject)模拟

java - 代理的原始类名(没有手动字符串操作)

java - 使用 ReSTLet 时如何跟踪日志中的请求?