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



新的JSR 299"Contexts and Dependency Injection for Java EE"似乎基于"Scope"的概念。

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

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

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

这让我想起了我前段时间问过的问题:@SessionScoped如何使用 EJB?CDI 仅适用于网络层吗?

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

爪哇多克 说:

应用程序范围处于活动状态:

(...

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

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

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

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

最新更新