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

    技术2022-07-11  77

    目录

    前言案例根据名称筛选注入bean根据标记筛选bean

    前言

    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注解的另外一种使用方式

    Processed: 0.009, SQL: 9