- Spring DI 教程
- Spring DI - 首页
- Spring DI - 概述
- Spring DI - 环境搭建
- Spring DI - IOC 容器
- Spring 依赖注入
- Spring DI - 创建项目
- 基于构造器的注入示例
- Spring DI - 基于构造器的注入
- Spring DI - 内部 Bean 构造器注入
- Spring DI - 集合类型构造器注入
- Spring DI - 集合引用类型构造器注入
- Spring DI - Map 类型构造器注入
- Spring DI - Map 引用类型构造器注入
- 基于 Setter 方法的注入示例
- Spring DI - 基于 Setter 方法的注入
- Spring DI - 内部 Bean Setter 注入
- Spring DI - 集合类型 Setter 注入
- Spring DI - 集合引用类型 Setter 注入
- Spring DI - Map 类型 Setter 注入
- Spring DI - Map 引用类型 Setter 注入
- 自动装配示例
- Spring DI - 自动装配
- Spring DI - 按名称自动装配
- Spring DI - 按类型自动装配
- Spring DI - 构造器自动装配
- 工厂方法
- Spring DI - 静态工厂方法
- Spring DI - 非静态工厂方法
- Spring DI 有用资源
- Spring DI - 快速指南
- Spring DI - 有用资源
- Spring DI - 讨论
Spring DI - 自动装配
您已经学习了如何在 XML 配置文件中使用 <bean> 元素声明 Bean,并使用 <constructor-arg> 和 <property> 元素注入 <bean>。
Spring 容器可以自动装配协作 Bean 之间的关联关系,而无需使用 <constructor-arg> 和 <property> 元素,这有助于减少为大型基于 Spring 的应用程序编写的 XML 配置量。
自动装配模式
以下是自动装配模式,可用于指示 Spring 容器使用自动装配进行依赖注入。您可以使用 <bean/> 元素的 autowire 属性为 Bean 定义指定自动装配模式。
序号 | 模式及描述 |
---|---|
1 |
no 这是默认设置,表示不进行自动装配,您应该使用显式 Bean 引用进行装配。对于这种装配,您无需进行任何特殊操作。这正是您在依赖注入章节中已经看到的。 |
2 |
按属性名称自动装配。Spring 容器查看在 XML 配置文件中将autowire 属性设置为byName 的 Bean 的属性。然后,它尝试匹配并将这些属性与配置文件中定义的同名 Bean 进行连接。 |
3 |
按属性数据类型自动装配。Spring 容器查看在 XML 配置文件中将autowire 属性设置为byType 的 Bean 的属性。然后,如果其类型与配置文件中完全匹配的一个 Bean 名称匹配,它将尝试匹配并连接属性。如果存在多个这样的 Bean,则会抛出致命异常。 |
4 |
类似于 byType,但类型应用于构造函数参数。如果容器中没有完全一个构造函数参数类型的 Bean,则会引发致命错误。 |
5 | autodetect Spring 首先尝试使用按构造函数自动装配,如果失败,Spring 尝试按byType 自动装配。 |
您可以使用byType 或constructor 自动装配模式来连接数组和其他类型集合。
自动装配的局限性
在整个项目中一致地使用自动装配效果最佳。如果通常不使用自动装配,则仅使用它来连接一个或两个 Bean 定义可能会使开发人员感到困惑。尽管自动装配可以显著减少指定属性或构造函数参数的需求,但在使用自动装配之前,您应该考虑其局限性和缺点。
序号 | 局限性及描述 |
---|---|
1 |
覆盖的可能性 您仍然可以使用 <constructor-arg> 和 <property> 设置来指定依赖项,这些设置将始终覆盖自动装配。 |
2 |
原始数据类型 您不能自动装配所谓的简单属性,例如原始类型、字符串和类。 |
3 |
容易混淆的特性 自动装配不如显式装配精确,因此,如果可能,请优先使用显式装配。 |