@Autowired使用中的问题及@Qualifire的使用

当使用@Autowired注解进行自动注时,Spring容器中匹配的Bean数目有且只有一个,否则将抛出BeanCrantionException异常。

问题一:没有相匹配的Bean

为解决这个问题,可以使用@Autowired(required=false),这就等于告诉Spring,在找不到匹配的Bean是也不报错。由于一般情况下使用@Autowired的地方都是需要注入Bean的,所以一般很少会用到。

问题二:有多个相匹配的Bean

解决方式:使用@Qualifier注释指定注入Bean的名称
格式:@Qualifier(“Bean的名称”)
@Autowired和@Qualifier结合使用,自动注入就从byType转变成byName。@Autowired可以对成员变量、方法以及构造函数进行注释,而@Qualifier的标注对象是成员变量、方法入参、构造函数入参

@Qualifier只能和@Autowired结合使用,是对@Autowired补充,@Qualifire对方法入参进行注释会降低代码的可读性,而对成员变量的注释会相对好一些。

成员变量使用 @Qualifier 注释
public class Boss {
@Autowired
private Car car;
@Autowired
@Qualifier("office")
private Office office;

}

构造函数变量使用 @Qualifier 注释
public class Boss {
private Car car;
private Office office;
@Autowired
public Boss(Car car , @Qualifier("office")Office office){
this.car = car;
this.office = office ;
}
}

方法入参使用 @Qualifier 注释
(使用 @Qualifier 注释指定注入 Bean 的名称)
@Autowired
public void setOffice(@Qualifier("office")Office office) {
this.office = office;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值