@Qualifier的使用方法

当使用@Autowired注解注入一个接口,而接口有两个实现类时,Spring会因找不到唯一匹配的bean而报错。@Qualifier注解用于指定确切的bean名称,解决这种冲突。在实现类上添加@Service(名称),并在需要的地方使用@Qualifier(名称)注解,即可正确注入所需的实现类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、@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去解决问题了

  1. 先去你的实现类上面加上名字

  1. @Service(“PersonSeriverImpl2”)

  1. 把刚刚看到的注释放开@Qualifier(“PersonSeriverImpl2”),就是你方法所需要调用到的接口方法上面
    好了,我们再去运行我们的程序就OK了

总结

这里对@Qualifier注解进行一句话总结:

在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢,我们就需要运用到@Qualifier这个注解来了,这个注解可以给出解决这个冲突的方法.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西西o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值