首先创建一个Animal的接口
public interface Animal {
void use();
}
有两个实现类,分别是:Cat & Dog
@Service
public class Dog implements Animal {
@Override
public void use() {
System.out.println("Dog!!!!");
}
}
@Service
public class Cat implements Animal {
@Override
public void use() {
System.out.println("Cat!!!!");
}
}
调用这个接口,且不顾IDEA的警告,启动项目,会看到以下的报错:
原因
@Autowired 它首先会根据类型找到对应的Bean,如果对应类型的Bean不是唯一的,那么它会根据其属性名称和Bean的名称进行匹配。
所以,解决这个问题的办法有:
方法一:修改属性名称
// before
@Autowired
Animal animal;
// after
@Autowired
Animal cat;
方法二:设置优先级
// @Primary: 当发现有多个同样类型的Bean时,优先使用这个Bean进行注入
// 但是,@Primary是允许在多个类上使用的。出现这种情况的话,即使加了@Primary,也是会报错
@Service
@Primary
public class Cat implements Animal {
@Override
public void use() {
System.out.println("Cat!!!!");
}
}
方法三:@Qualifier
其实在IDEA上也给出了这个解决方法
// 在@Autowired基础上,加上@Qualifier,并且填写上对应的属性名称,也可以达到同样的效果
@Qualifier("dog")
@Autowired
Animal animal;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/77918.html