《该注解可以使用在类上、属性上、参数上、方法上》

1.  当使用在上的时候,如下代码,@Qualifier注解里面填写的值就是当前类注入到IOC容器的bean的唯一标识(id),再使用到该Bean的地方就可以直接根据唯一标识(id)从IOC容器中获取了;

//该类注入到IOC容器中Bean的id为userObject
@Component
@Qualifier("userObject")
public class Use{

    private String name="lisa";
 
    public User() {
    }
 
    public User(String name) {
        this.name = name;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

2.  当使用在属性上的时候,如下代码,@Qualifier 和 @Autowired结合使用可以通过唯一Bean的id实现自动装配,因为单独的@Autowired注解实现自动装配是按照类型优先原则的,一旦IOC容器中出现了两个类型一样的Bean,@Autowired注解就会无法辨别用那个,即而报错,但是当我们加上 @Qualifier(value = "Bean的id") 的时候就可以直接通过Bean的唯一标识(id)进行装配了。

@Component
public class QualifierTest {

    //@Qualifier 和 @Autowired结合使用可以通过唯一Bean的id实现自动装配
    @Autowired
    @Qualifier("userA")
    private User user;
 
 
    public void test(){
        System.out.println(user.getName());
    }
}

3.   当使用在参数上时,如下代码,一般是@Configuration注解进行bean申明的时候方法参数列表中使用;

在参数上时通@Qualifier注解指定Bean的唯一标识,让参数的指定的Bean绑定起来;具有同样指定Bean唯一标识的@Resource在此无法在参数中使用。

@Configuration
public class QualifierConfig {

    @Bean
    public Student student(@Qualifier("userA") User user){
        return new Userfact(user);
    }
}

4. 在方法上时,@Qualifier起到了一个筛选的作用,只有加了@Qualifier注解的Bean才会被收集注入到本方法。

//@Qualifier在方法上时,遇见自动装配中有@Qualifier不会被过滤
@Qualifier
@Bean
public User user1() {
  return new User("zhangsan",18) ;
}

@Bean
public User user2() {
  return new User("lisi",17);
}


//只有user1会被自动注入到users,user2因为没有@Qualifier注解而导致被过滤掉了
@Resource
@Qualifier
private List<User> users = Collections.emptyList() ;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐