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

时间:2015-05-05 18:46:07

标签: java dependency-injection cdi

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

  1. 资源注入
  2. 依赖注入
  3. 请指导我了解资源注入与资源注入之间的区别依赖注入。

4 个答案:

答案 0 :(得分:21)

来自source

  

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

     

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

     

资源注入和依赖注入之间的区别   RI和DI之间的差异列在下面。

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

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

  4.   
  5. 资源注入按资源名称解析,而依赖关系Injectin按类型解析。

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

  8.   

答案 1 :(得分:7)

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

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

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

Take a look at one of my article I wrote on this.

答案 2 :(得分:5)

答案 3 :(得分:3)

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

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