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 自动装配。 |
您可以使用 byType 或 constructor 自动装配模式来连接数组和其他类型化的集合。
自动装配的限制
自动装配在项目中一致使用时效果最佳。 如果通常不使用自动装配,开发人员可能会混淆使用它来只装配一两个 bean 定义。 虽然,自动装配可以显着减少指定属性或构造函数参数的需要,但您应该在使用它们之前考虑自动装配的限制和缺点。
序号 | 限制 & 描述 |
---|---|
1 |
最重要的可能性 您仍然可以使用始终覆盖自动装配的 <constructor-arg> 和 <property> 设置来指定依赖项。 |
2 |
原始数据类型 您不能自动装配所谓的简单属性,例如原始数据、字符串和类。 |
3 |
Confusing nature 自动连接不如显式连接精确,因此如果可能,最好使用显式连接。 |