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

时间:2012-01-26 10:43:12

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

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

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

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

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

3 个答案:

答案 0 :(得分:3)

它让我想起我前段时间问过的问题:How does @SessionScoped work with EJB? Is CDI only for web-tier?

似乎“范围”的概念仅在HTTP会话的情况下才有意义 但是,我可以看到有效使用@ApplicationScoped作用域作为实现应用程序单例bean的方法,尽管请求是HTTP。

Javadoc说:

  

申请范围有效:

     

(...)

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

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

  •   

答案 1 :(得分:3)

您还可以创建自己的范围。 CDI非常易于扩展,可用于各种情况。它也被用在没有HttpSession和HttpRequest的SE应用程序中。

答案 2 :(得分:0)

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