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

来源:互联网 发布:ubuntu 休眠设置 编辑:程序博客网 时间:2024/06/16 20:20

当使用@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
原创粉丝点击