新的JSR 299“Java EE的上下文和依赖注入”似乎基于“范围”的概念。
创建bean并将其与受支持的Scope之一相关联:Application,Session(映射到HTTP会话),Conversation和Request。
如果没有HTTP会话(例如,通过EJB远程公开功能的企业应用程序),使用CDI是否有意义,因为托管Bean不会与任何上下文关联(因为它们不存在) ?
在这种情况下甚至可以使用CDI吗?它会带来哪些优势?
答案 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模式。