Spring DI - 自动装配

您已经学习了如何使用 <bean> 元素声明 bean 并在 XML 配置文件中使用 <constructor-arg> 和 <property> 元素注入 <bean>。

Spring 容器可以在协作 bean 之间自动装配关系,而无需使用 <constructor-arg> 和 <property> 元素,这有助于减少您为基于 Spring 的大型应用程序编写的 XML 配置量。


自动装配模式

以下是自动装配模式,可用于指示 Spring 容器使用自动装配进行依赖注入。 您使用 <bean/> 的 autowire 属性。 元素来指定 bean 定义的 autowire 模式。

序号 模式 & 描述
1

no

这是默认设置,这意味着没有自动装配,您应该使用显式 bean 引用进行装配。 对于这种接线,您无需做任何特别的事情。 这是你在依赖注入一章中已经看到的。

2

byName

按属性名称自动装配。 Spring 容器查看在 XML 配置文件中 autowire 属性设置为 byName 的 bean 的属性。 然后,它会尝试将其属性与配置文件中由相同名称定义的 bean 进行匹配和连接。

3

byType

按属性数据类型自动装配。 Spring 容器查看在 XML 配置文件中 autowire 属性设置为 byType 的 bean 的属性。 然后,如果它的 type 与配置文件中的一个 beans 名称完全匹配,它会尝试匹配和连接一个属性。 如果存在多个此类 bean,则会引发致命异常。

4

constructor

与 byType 类似,但类型适用于构造函数参数。 如果容器中没有一个构造函数参数类型的 bean,则会引发致命错误。

5

autodetect

Spring 首先尝试使用 constructor 的自动装配,如果它不起作用,Spring 会尝试通过 byType 自动装配。

您可以使用 byTypeconstructor 自动装配模式来连接数组和其他类型化集合。


自动装配的限制

自动装配在项目中一致使用时效果最佳。 如果一般不使用自动装配,开发人员可能会混淆使用它来只装配一个或两个 bean 定义。 虽然,自动装配可以显着减少指定属性或构造函数参数的需要,但您应该在使用它们之前考虑自动装配的限制和缺点。

序号 限制 & 描述
1

Overriding possibility

您仍然可以使用始终覆盖自动装配的 <constructor-arg> 和 <property> 设置来指定依赖项。

2

Primitive data types

您不能自动装配所谓的简单属性,例如基元、字符串和类。

3

Confusing nature

自动连线不如显式连线精确,因此如果可能,最好使用显式连线。