Spring Autowired(required = false) 说明
来源:互联网 发布:看不见的客人影评知乎 编辑:程序博客网 时间:2024/05/20 18:54
当候选 Bean 数目不为 1 时的应对方法
在默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出 BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。我们可以来做一个实验:
由于 office Bean 被注释掉了,所以 Spring 容器中将没有类型为 Office 的 Bean 了,而 Boss 的 office 属性标注了 @Autowired,当启动 Spring 容器时,异常就产生了。
当不能确定 Spring 容器中一定拥有某个类的 Bean 时,可以在需要自动注入该类 Bean 的地方可以使用 @Autowired(required = false),这等于告诉 Spring:在找不到匹配 Bean 时也不报错。来看一下具体的例子:
清单 11. 使用 @Autowired(required = false)
当然,一般情况下,使用 @Autowired 的地方都是需要注入 Bean 的,使用了自动注入而又允许不注入的情况一般仅会在开发期或测试期碰到(如为了快速启动 Spring 容器,仅引入一些模块的 Spring 配置文件),所以 @Autowired(required = false) 会很少用到。
和找不到一个类型匹配 Bean 相反的一个错误是:如果 Spring 容器中拥有多个候选 Bean,Spring 容器在启动时也会抛出 BeanCreationException 异常。来看下面的例子:
清单 12. 在 beans.xml 中配置两个 Office 类型的 Bean
我们在 Spring 容器中配置了两个类型为 Office 类型的 Bean,当对 Boss 的 office 成员变量进行自动注入时,Spring 容器将无法确定到底要用哪一个 Bean,因此异常发生了。
Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常:
清单 13. 使用 @Qualifier 注释指定注入 Bean 的名称
对成员变量进行注释:
清单 14. 对成员变量使用 @Qualifier 注释
@Qualifier 只能和 @Autowired 结合使用,是对 @Autowired 有益的补充。一般来讲,@Qualifier 对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。
在默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出 BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。我们可以来做一个实验:
清单 10. 候选 Bean 数目为 0 时
由于 office Bean 被注释掉了,所以 Spring 容器中将没有类型为 Office 的 Bean 了,而 Boss 的 office 属性标注了 @Autowired,当启动 Spring 容器时,异常就产生了。
当不能确定 Spring 容器中一定拥有某个类的 Bean 时,可以在需要自动注入该类 Bean 的地方可以使用 @Autowired(required = false),这等于告诉 Spring:在找不到匹配 Bean 时也不报错。来看一下具体的例子:
清单 11. 使用 @Autowired(required = false)
当然,一般情况下,使用 @Autowired 的地方都是需要注入 Bean 的,使用了自动注入而又允许不注入的情况一般仅会在开发期或测试期碰到(如为了快速启动 Spring 容器,仅引入一些模块的 Spring 配置文件),所以 @Autowired(required = false) 会很少用到。
和找不到一个类型匹配 Bean 相反的一个错误是:如果 Spring 容器中拥有多个候选 Bean,Spring 容器在启动时也会抛出 BeanCreationException 异常。来看下面的例子:
清单 12. 在 beans.xml 中配置两个 Office 类型的 Bean
我们在 Spring 容器中配置了两个类型为 Office 类型的 Bean,当对 Boss 的 office 成员变量进行自动注入时,Spring 容器将无法确定到底要用哪一个 Bean,因此异常发生了。
Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常:
清单 13. 使用 @Qualifier 注释指定注入 Bean 的名称
对成员变量进行注释:
清单 14. 对成员变量使用 @Qualifier 注释
对构造函数入参进行注释:
清单 15. 对构造函数变量使用 @Qualifier 注释
@Qualifier 只能和 @Autowired 结合使用,是对 @Autowired 有益的补充。一般来讲,@Qualifier 对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。
阅读全文
0 0
- Spring Autowired(required = false) 说明
- Spring Autowired(required = false) 说明
- Spring Autowired(required = false) 说明
- Spring Autowired(required = false) 说明
- Spring Autowired(required = false) 说明
- Spring Autowired(required = false) 说明
- Spring Autowired(required = false) 说明
- Spring Autowired(required = false) 说明
- Spring Autowired(required = false) 说明与@Qualifier 注释说明
- spring 中注解@Autowired,@Required,@Resource
- 5.spring注解@Required、@Autowired、@qualifier、@resource
- spring注解@Required、@Autowired、@qualifier、@resource
- spring基于注解的配置 @Required @Autowired
- @Required & @Autowired
- Spring异常: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
- Spring——注解上传文件.@RequestParam(value = "file1", required = false) ;
- spring 注解上传文件 @RequestParam(value = "file1", required = false)
- Spring @Autowired,@Resource,@Required注解的用法和作用
- Python脚本实现树莓派读取mpu9250传感器数据
- 设计模式准备篇
- 工作后,你悟出什么职场道理?
- 24.Redis集群安装使用
- 欢迎使用CSDN-markdown编辑器
- Spring Autowired(required = false) 说明
- 【总结】微信小程序
- 强大的矩阵奇异值分解(SVD)及其应用
- 手机端页面制作
- 莱茵棋牌架设所需要工具和软件
- 使用Bottom Sheet实现底部菜单,初步识别
- Codeforces 842 D Vitya and Strange Lesson 线段树
- unbutu16.04 编译 kodi 17.1
- Android 通过appt.exe获取已安装apk的版本信息