spring注解之Qualifier的两种不同的使用方式

前言

Qualifier是spring提供的一个注解,常规使用是当我们定义了多个类型相同但是每次不同的bean时,在注入时根据名称来选择注入bean

案例

根据名称筛选注入bean
@Configuration
public class QualifierConfig2 {

    @Bean("fastTopic1")
    public FastTopic fastTopic1() {
        FastTopic f = new FastTopic();
        f.setId(1L);
        return f;
    }

    @Bean("fastTopic2")
    public FastTopic fastTopic2() {
        FastTopic f = new FastTopic();
        f.setId(2L);
        return f;
    }

    @Bean("fastTopic3")
    public FastTopic fastTopic3() {
        FastTopic f = new FastTopic();
        f.setId(3L);
        return f;
    }
}

在注入时如果使用@Autowired注解则默认根据类型注入,导致注入失败,这个时候@Qualifier就可以指定要注入的名称

@Qualifier("fastTopic1")
@Autowired
private FastTopic fastTopic;

这里也可以直接使用@Resource来代替

@Resource(name = "fastTopic1")
private FastTopic fastTopic;
根据标记筛选bean

本文主要介绍下@Qualifier另外一种使用方式

首先介绍下我们注入list的方式,fastTopics使用@Autowired可以把类型为FastTopic的bean全部注入到集合中,如下所示fastTopics会有三个bean

@Configuration
public class QualifierConfig {
    @Autowired
    List<FastTopic> fastTopics = new ArrayList<>();

    @Bean("fastTopic1")
    public FastTopic fastTopic1() {
        FastTopic f = new FastTopic();
        f.setId(1L);
        return f;
    }

    @Bean("fastTopic2")
    public FastTopic fastTopic2() {
        FastTopic f = new FastTopic();
        f.setId(2L);
        return f;
    }

    @Bean("fastTopic3")
    public FastTopic fastTopic3() {
        FastTopic f = new FastTopic();
        f.setId(3L);
        return f;
    }
}

这个时候如果我们只需要注入其中的两个bean到fastTopics中怎么办,这个时候就可以用到我们的@Qualifier注解了,给我们的bean fastTopic1和fastTopic2标记注解@Qualifier,需要注入的集合也标记@Qualifier

@Configuration
public class QualifierConfig {

    @Qualifier
    @Autowired
    List<FastTopic> fastTopics = new ArrayList<>();

    @Qualifier
    @Bean("fastTopic1")
    public FastTopic fastTopic1() {
        FastTopic f = new FastTopic();
        f.setId(1L);
        return f;
    }

    @Qualifier
    @Bean("fastTopic2")
    public FastTopic fastTopic2() {
        FastTopic f = new FastTopic();
        f.setId(2L);
        return f;
    }

    @Bean("fastTopic3")
    public FastTopic fastTopic3() {
        FastTopic f = new FastTopic();
        f.setId(3L);
        return f;
    }
}

这个时候fastTopics里面只注入了bean fastTopic1和fastTopic2,即@Qualifier也可以用来筛选bean,这也是@Qualifier注解的另外一种使用方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值