spring依赖注入

2026-03-06 17:29:18

1、依赖注入(DI)是一个过程,通过这个过程,对象只能通过构造函数参数,工厂方法的参数或在构造对象实例后在对象实例上设置的属性来定义它们的依赖关系(即,它们使用的其他对象)。

spring依赖注入

2、从工厂方法返回。然后容器在创建bean时注入这些依赖项。这个过程基本上是bean本身的反向(因此名称,控制反转),它通过使用类的直接构造或服务定位器模式来控制其依赖项的实例化或位置。

spring依赖注入

3、使用DI原则的代码更清晰,当对象提供其依赖项时,解耦更有效。该对象不查找其依赖项,也不知道依赖项的位置或类。因此,您的类变得更容易测试,特别是当依赖关系在接口或抽象基类上时,这允许在单元测试中使用存根或模拟实现。

4、基于构造函数的DI由容器调用具有多个参数的构造函数来完成,每个参数表示一个依赖项。调用static 具有特定参数的工厂方法来构造bean几乎是等效的。

spring依赖注入

5、以下示例显示了一个只能通过构造函数注入进行依赖注入的类:

spring依赖注入

6、构造函数参数解析通过使用参数的类型进行构造函数参数解析匹配。如果bean定义的构造函数参数中不存在潜在的歧义,那么在bean定义中定义构造函数参数的顺序是在实例化bean时将这些参数提供给适当的构造函数的顺序。考虑以下class:

spring依赖注入

7、假设 ThingTwo 并且 ThingThree 类与继承无关,则不存在潜在的歧义。因此,以下配置工作正常,您不需要在 <constructor-arg/> 元素中显式指定构造函数参数索引或类型。

spring依赖注入

8、当引用另一个bean时,类型是已知的,并且可以发生匹配(与前面的示例一样)。当使用简单类型时,例如 <value>true</value> ,Spring无法确定值的类型,因此无法在没有帮助的情况下按类型进行匹配。考虑以下class:

spring依赖注入

9、构造函数参数类型匹配

在前面的场景中,如果使用 type 属性显式指定构造函数参数的类型,则容器可以使用与简单类型的类型匹配。如下例所示:

spring依赖注入

10、构造函数参数索引您可以使用该 index 属性显式指定构造函数参数的索引,如以下示例所示:

spring依赖注入

11、构造函数参数名称您还可以使用构造函数参数名称进行值消歧,如以下示例所示:

spring依赖注入

12、为了使这项工作开箱即用,必须在启用调试标志的情况下编译代码,以便Spring可以从构造函数中查找参数名称。如果您不能或不想使用debug标志编译代码,则可以使用@ConstructorProperties JDK批注显式命名构造函数参数。然后,示例类必须如下所示:

spring依赖注入

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢