提示:主要讲@Qualifier这个注解
文章目录
一、@Qualifier是什么意思?
修饰语自我理解就是对@Autowired的补充,为什么我认为是补充呢?因为大家都知道是跟着@Autowired这个注解的,所以为了方便理解,我就认为是它的补充,基调先定在这里,然后我们再看看是一个什么样的补充.
二、具体说明
1.@Autowired是从Spring容器里面注入资源,但如果是一个接口,而且接口里面有两个实现类,如果我们需要使用该接口的方法,系统就不会识别我们到底用哪个实现类去实现
代码如下(示例):
@Autowired
// @Qualifier("PersonSeriverImpl2")
private PersonSeriver personSeriver;
public void eats() {
personSeriver.eat();
}
注意下@Qualifier(“PersonSeriverImpl2”)
这个我是注释了的
然而我的PersonSeriver有两个实现类,然后我现在运行程序就会报下面错
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type ‘com.itheima.seriver.PersonSeriver’ available: expected single matching bean but found 2: personSeriverImpl,personSeriverImpl2
翻译大概意思是:
由以下原因引起:org.springframework.beans.factory.NoUniqueBeanDefinitionException:没有类型为’com.itheima.seriver.PersonSeriver’的合格Bean:预期有单个匹配的Bean,但找到了2:personSeriverImpl,personSeriverImpl2
就是说,现在注入了两个资源,到底用哪个资源去实现它?然后就报错了,这个时候就需要我们的@Qualifier去解决问题了
- 先去你的实现类上面加上名字
- @Service(“PersonSeriverImpl2”)
- 把刚刚看到的注释放开@Qualifier(“PersonSeriverImpl2”),就是你方法所需要调用到的接口方法上面
好了,我们再去运行我们的程序就OK了
总结
这里对@Qualifier注解进行一句话总结:
在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢,我们就需要运用到@Qualifier这个注解来了,这个注解可以给出解决这个冲突的方法.