Spring - 自动装配 Bean



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

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

自动装配模式

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

序号 模式及描述
1 no

这是默认设置,表示不进行自动装配,您应该使用显式 Bean 引用进行装配。对于这种装配,您无需做任何特殊操作。这正是您在依赖注入章节中已经看到的。

2 byName

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

3 byType

按属性数据类型自动装配。Spring 容器查看在 XML 配置文件中将 autowire 属性设置为 byType 的 Bean 的属性。然后,如果其**类型**与配置文件中完全匹配的一个 Bean 名称相匹配,它将尝试匹配和装配该属性。如果存在多个这样的 Bean,则会抛出一个致命异常。

4 constructor

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

5 autodetect

Spring 首先尝试使用 autowire by constructor 进行装配,如果失败,则尝试使用 autowire by byType 进行装配。

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

自动装配的局限性

当自动装配在整个项目中一致使用时,效果最佳。如果通常不使用自动装配,那么开发人员仅使用它来装配一两个 Bean 定义可能会令人困惑。虽然自动装配可以显著减少指定属性或构造函数参数的需要,但在使用它们之前,您应该考虑自动装配的局限性和缺点。

序号 局限性及描述
1

覆盖可能性

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

2

原始数据类型

您无法自动装配所谓的简单属性,例如基本类型、字符串和类。

3

容易混淆

自动装配不如显式装配精确,因此,如果可能,请优先使用显式装配。

广告

© . All rights reserved.