Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果没有Web层,因此没有HTTP会话,CDI有意义吗?_Java_Java Ee 6_Cdi_Ejb 3.1 - Fatal编程技术网

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

Java 如果没有Web层,因此没有HTTP会话,CDI有意义吗?,java,java-ee-6,cdi,ejb-3.1,Java,Java Ee 6,Cdi,Ejb 3.1,新的JSR299“JavaEE的上下文和依赖注入”似乎基于“范围”的概念 bean被创建并关联到一个受支持的作用域:应用程序、会话(映射到HTTP会话)、会话和请求 如果没有HTTP会话(例如,通过EJB远程处理公开功能的企业应用程序),那么使用CDI有意义吗?因为托管bean不会与任何上下文关联(因为它们不存在) 在这种情况下,甚至可以使用CDI吗?它会给它带来哪些好处?它让我想起了我自己不久前提出的问题: “作用域”的概念似乎只与HTTP会话相关。 然而,我可以看到@ApplicationS

新的JSR299“JavaEE的上下文和依赖注入”似乎基于“范围”的概念

bean被创建并关联到一个受支持的作用域:应用程序、会话(映射到HTTP会话)、会话和请求

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


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

它让我想起了我自己不久前提出的问题:

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

说:

应用范围是活动的:

(……)

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

  • 在任何EJB的任何远程方法调用期间,在任何EJB的任何异步方法调用期间,在任何EJB调用期间 超时方法,并在消息传递到任何EJB消息驱动的 豆子


您还可以创建自己的作用域。CDI具有很强的可扩展性,可以在各种情况下使用。它也被用于既没有HttpSession也没有HttpRequest的SE应用程序中

除此之外,CDI不仅用于生命周期管理,您还可以使用它进行依赖注入,从而以非常干净的方式将接口与其实现分离开来。您还可以使用拦截器和装饰器执行一些AOP技术,或者通过利用CDI事件构建一个非常松散耦合的观察者模式