Spring - Beans 自动装配

您已经学习了如何在 XML 配置文件中使用 <bean> 元素声明 bean 并使用 <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

最重要的可能性

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

2

原始数据类型

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

3

Confusing nature

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