这个问题直接来自我这里的另一个问题。该问题答案的最后一段提到了CDI
技术。
你能解释一下这项技术的目的是什么。该技术与 JSF 和 EJB 有什么关系吗?我已经解决了这个问题,但我还不清楚该技术的目的是什么。我特别想知道它与 EJB 和 JSF 等其他 Java EE 技术的匹配度。
添加到 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 规范负责人)等人强烈暗示了这一点。
进一步阅读:
首先,CDI 是一个依赖注入标准框架。它定义了对象获取依赖关系的方法,而不是通过实例化(private FooDao dao = new FooDao()
),而是通过创建和管理实例的容器。您可以阅读有关依赖注入的更多信息(google/wiki)。
该标准定义了它如何与 JSF 和 EJB 一起工作。
简而言之,CDI 绑定 JavaEE 中的所有组件,就像 spring 绑定它的所有组件一样,但 CDI 是一个标准。