Qualifier是spring提供的一个注解,常规使用是当我们定义了多个类型相同但是每次不同的bean时,在注入时根据名称来选择注入bean
在注入时如果使用@Autowired注解则默认根据类型注入,导致注入失败,这个时候@Qualifier就可以指定要注入的名称
@Qualifier("fastTopic1") @Autowired private FastTopic fastTopic;这里也可以直接使用@Resource来代替
@Resource(name = "fastTopic1") private FastTopic fastTopic;本文主要介绍下@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注解的另外一种使用方式