Java中的资源注入和依赖注入(CDI)有什么区别?

22 java dependency-injection cdi

我一直在学习Java EE,发现Java EE提供了两种类型的注入机制

  1. 资源注入
  2. 依赖注入

请指导我理解资源注入和依赖注入之间的区别.

Rah*_*thi 22

来源:

通过资源注入,您可以将JNDI名称空间中可用的任何资源注入任何容器管理的对象,例如servlet,企业bean或托管bean.例如,我们可以使用资源注入来注入数据源,连接器或JNDI名称空间中可用的任何其他所需资源.

依赖注入使我们能够将常规Java类转换为托管对象,并将它们注入任何其他托管对象(由容器管理的对象).

资源注入和依赖注入之间的区别RI和DI之间的差异如下所示.

  1. 资源注入可以直接注入JNDI资源,而依赖注入则不能.

  2. 依赖注入可以直接注入Regular Classes(托管bean),而Resource Injection则不能.

  3. 资源注入按资源名称解析,而依赖项Injectin按类型解析.

  4. 依赖注入是类型安全的,而Resoiurce Injection则不是.

  • 您可以使用`@ Produces`将普通Java EE资源注入"类型安全"依赖注入. (3认同)
  • Thnx的解释! (2认同)

Lal*_*Rao 6

Java EE提供了注入机制,使我们的对象能够获得对资源和其他依赖项的引用,而无需直接实例化它们(显式地使用'new'关键字).我们通过绘制带有注释的字段或方法来简单地在类中声明所需的资源和其他依赖项,这些注释表示编译器的注入点.

然后容器在运行时提供所需的实例.注入的优势在于它简化了我们的代码并将其与其依赖项的实现分离.

这两种方法都有助于实现控制反转.

看看我在这篇文章中写的一篇文章.


Jos*_*nez 6

Rahul Tripathi 的答案是准确且正确的。但是,用更简洁的方式来帮助您决定使用哪个,让我们这样看:DI 通常用于将实现类分配给接口。而 RI 用于从 JNDI 提取属性值和 JDBC 连接。DI 允许您针对接口编写代码,然后决定使用哪个实现。有一些重叠,通常当 RI 的对象不仅仅是一个属性值时,并且当 DI 用于传递一个属性值时。正如我已经提到的,这种重叠的一个很好的例子是 JDBC 连接。JDBC 连接不仅是一个连接字符串(属性值),还是一个实现(要使用哪些驱动程序)。

我认为如果您正在使用 DI 并且需要传递一些属性值,请继续使用 DI。如果您正在使用 RI 并且需要传递一个对象,那么如果可能的话,不要只在 RI 中进行。最终,如果您同时使用两者,则需要填写更多的 XML 文件。