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