前言
当同一个类型的Bean创建了多个时,我们可以通过搭配@Autowired和@Qualifier来确定需要注入的Bean解决混淆。除此以外,@Qualifier还可以标注在Bean上实现逻辑分组。
源码
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Qualifier {
String value() default "";
}
使用
标注在单个属性上,是根据name去获取Bean:
@Autowired
@Qualifier("bean2")
private MyBean mybean;
@Bean
public MyBean bean1() {
return new MyBean();
}
@Bean
public MyBean bean2() {
return new MyBean();
}
标注在集合上,则可以筛选出被@Qualifier标注的Bean
@Autowired
private List<User> users; // user1, user2, user3
@Autowired
@Qualifier
private List<User> usersQualifier; // user2, user3
@Bean
public User user1() {
return new User();
}
@Bean
@Qualifier
public User user2() {
return new User();
}
@Bean
@Qualifier
public User user3() {
return new User();
}