Spring @Autowired, @Primary, @Qualifier

导读:本篇文章讲解 Spring @Autowired, @Primary, @Qualifier,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

首先创建一个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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!