Spring 简明教程
Spring - Beans Auto-Wiring
你已了解如何使用 <bean> 元素声明 bean,并使用 XML 配置文件中的 <constructor-arg> 和 <property> 元素注入 <bean>。
Spring 容器可以在不使用 <constructor-arg> 和 <property> 元素的情况下确定协作 bean 之间的关系,这有助于减少为大型基于 Spring 的应用程序编写的 XML 配置量。
Autowiring Modes
以下是自动装配模式,可以用于指示 Spring 容器对依赖项注入使用自动装配。你可以使用 <bean/> 元素的 autowire 属性来为 bean 定义指定 autowire 模式。
Sr.No |
Mode & Description |
1 |
*no*这是默认设置,表示不自动装配,而你应该使用显式的 bean 引用来进行装配。你不需要专门为此装配做任何事。这是你在依赖项注入一章中已经了解的内容。 |
2 |
byName 按属性名称自动装配。Spring 容器会查看 XML 配置文件中将 autowire 属性设置为 byName 的 bean 的属性。然后,它会尝试匹配并用配置中具有相同名称的 bean 装配其属性。 |
3 |
byType 按属性数据类型自动装配。Spring 容器查看 XML 配置文件中的自动装配属性设置为按类型装配的 Bean 的属性。然后它尝试匹配并连接属性,如果其 type 恰好与配置文件中 Bean 名称的其中一个匹配。如果存在多个这样的 Bean,则会引发致命异常。 |
4 |
constructor 与按类型装配类似,但类型适用于构造函数参数。如果在容器中没有恰好一个构造函数参数类型的 Bean,则会引发致命错误。 |
5 |
*自动检测*Spring 首先尝试通过构造函数自动装配来连接,如果不起作用,Spring 尝试按类型自动装配。 |
你可以使用 byType 或 constructor 自动装配模式来连接数组和其他类型集合。
Limitations with autowiring
当在整个项目中一致使用时,自动装配效果最好。如果通常不使用自动装配,开发人员仅将其用于连接一个或两个 Bean 定义可能会令人迷惑。尽管如此,自动装配可以显著减少指定属性或构造函数参数的需要,但你应在使用自动装配前考虑其局限性和缺点。
Sr.No. |
Limitations & Description |
1 |
Overriding possibility 你仍然可以使用 <constructor-arg> 和 <property> 设置来指定依赖,这将始终覆盖自动装配。 |
2 |
Primitive data types 你不能自动装配原始类型、字符串和类等所谓的简单属性。 |
3 |
Confusing nature 自动装配不像显式装配那么精确,所以如果可能,最好使用显式装配。 |