官方解释:
This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring. It may also be used to annotate other custom annotations that can then in turn be used as qualifiers.
简单的理解就是:
(1)在使用@Autowire自动注入的时候,加上@Qualifier(“test”)可以指定注入哪个对象;
(2)可以作为筛选的限定符,我们在做自定义注解时可以在其定义上增加@Qualifier,用来筛选需要的对象。
指定name,注入特定name的对象
使用步骤:
(1)注册bean对象,添加bean对象注入时的名称name
(2)自动注入bean对象时,添加@Qualifier注解筛选出指定name的bean对象
@Autowired和@Qualifier这两个注解的连用在这个位置就类似@Resource(name=“testClass1”)
@Configuration
public class TestConfiguration {
@Bean("testClass1")
TestClass testClass1(){
return new TestClass("TestClass1");
}
@Bean("testClass2")
TestClass testClass2(){
return new TestClass("TestClass2");
}
}
@RestController
public class TestController {
//此时这两个注解的连用就类似 @Resource(name="testClass1")
@Autowired
@Qualifier("testClass1")
private TestClass testClass;
@GetMapping("/test")
public Object test(){
return testClassList;
}
}
使用方式2
用于标记筛选增加了@Qualifier注解的对象
使用步骤:
(1)注册bean对象的时候添加@Qualifier注解,进行标记
(2)自动注入bean对象时,添加@Qualifier注解筛选出标记的bean对象
@Configuration
public class TestConfiguration {
// 我们调整下在testClass1上增加@Qualifier注解
@Qualifier
@Bean("testClass1")
TestClass testClass1() {
return new TestClass("TestClass1");
}
@Bean("testClass2")
TestClass testClass2() {
return new TestClass("TestClass2");
}
}
@RestController
public class TestController {
// 1. 我们这里使用一个list去接收testClass的对象
@Autowired
List testClassList= Collections.emptyList();
@GetMapping("/test")
public Object test(){
// 结果有两个 [{"name":"TestClass1"},{"name":"TestClass2"}]
return testClassList;
}
// 2. 我们在这增加注解
@Qualifier
@Autowired
List testClassList2= Collections.emptyList();
@GetMapping("/test2")
public Object test2(){
// 结果只有TestClass1 [{"name":"TestClass1"}]
return testClassList;
}
}
另外,@Qualifier注解是可以指定value的,可以通过values来分类筛选想要的对象了



