4

这个问题直接来自我这里的另一个问题。该问题答案的最后一段提到了CDI技术。

你能解释一下这项技术的目的是什么。该技术与 JSF 和 EJB 有什么关系吗?我已经解决了这个问题,但我还不清楚该技术的目的是什么。我特别想知道它与 EJB 和 JSF 等其他 Java EE 技术的匹配度。

4

2 回答 2

7

添加到 Bozho 的正确答案:

CDI 是 JSF 托管 bean 的超集,而 JSF 最终将弃用他们自己的本地托管 bean 系统。在 JSF 2.2 中已经为此采取了步骤。

CDI 不是 EJB bean 的超集,但它们相互补充。CDI 不仅为 EJB bean 提供更高级的 DI,而且还能够为 EJB bean 提供范围(主要用于有状态 bean)。EJB 则提供 CDI 不提供的事务和安全服务等。与 JSF 托管 bean 一样,EJB bean 最终将合并到 CDI 组件模型中。Marina Vatkina(EJB 规范负责人)等人强烈暗示了这一点。

进一步阅读:

于 2012-12-21T10:51:15.020 回答
3

首先,CDI 是一个依赖注入标准框架。它定义了对象获取依赖关系的方法,而不是通过实例化(private FooDao dao = new FooDao()),而是通过创建和管理实例的容器。您可以阅读有关依赖注入的更多信息(google/wiki)。

该标准定义了它如何与 JSF 和 EJB 一起工作。

  • 您的 JSF 托管 bean 可以通过 CDI 定义,这样您就可以将服务注入托管 bean,并且 CDI 管理 JSF 托管 bean 的生命周期
  • EJB 还可以从 CDI 的高级依赖注入中受益(以前他们有自己的,功能较差的 DI)。

简而言之,CDI 绑定 JavaEE 中的所有组件,就像 spring 绑定它的所有组件一样,但 CDI 是一个标准。

于 2012-12-21T05:44:20.410 回答