@Qualifier的作用和應(yīng)用
點(diǎn)擊上方藍(lán)色“小哈學(xué)Java”,選擇“設(shè)為星標(biāo)” 回復(fù)“資源”獲取獨(dú)家整理的學(xué)習(xí)資料!
來(lái)源:blog.csdn.net/qq_30062181/article/details/107619529
@Qualifier的作用
這是官方的介紹
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.
簡(jiǎn)單的理解就是:
在使用@Autowire自動(dòng)注入的時(shí)候,加上@Qualifier(“test”)可以指定注入哪個(gè)對(duì)象; 可以作為篩選的限定符,我們?cè)谧鲎远x注解時(shí)可以在其定義上增加@Qualifier,用來(lái)篩選需要的對(duì)象。這個(gè)理解看下面的代碼吧,不好解釋。
功能介紹
首先是對(duì)(1)的理解。
//我們定義了兩個(gè)TestClass對(duì)象,分別是testClass1和testClass2
//我們?nèi)绻诹硗庖粋€(gè)對(duì)象中直接使用@Autowire去注入的話,spring肯定不知道使用哪個(gè)對(duì)象
//會(huì)排除異常 required a single bean, but 2 were found
@Configuration
public class TestConfiguration {
@Bean("testClass1")
TestClass testClass1(){
return new TestClass("TestClass1");
}
@Bean("testClass2")
TestClass testClass2(){
return new TestClass("TestClass2");
}
}
下面是正常的引用
@RestController
public class TestController {
//此時(shí)這兩個(gè)注解的連用就類似 @Resource(name="testClass1")
@Autowired
@Qualifier("testClass1")
private TestClass testClass;
@GetMapping("/test")
public Object test(){
return testClassList;
}
}
@Autowired和@Qualifier這兩個(gè)注解的連用在這個(gè)位置就類似 @Resource(name=“testClass1”)
對(duì)(2)的理解
@Configuration
public class TestConfiguration {
//我們調(diào)整下在testClass1上增加@Qualifier注解
@Qualifier
@Bean("testClass1")
TestClass testClass1(){
return new TestClass("TestClass1");
}
@Bean("testClass2")
TestClass testClass2(){
return new TestClass("TestClass2");
}
}
@RestController
public class TestController {
//我們這里使用一個(gè)list去接收testClass的對(duì)象
@Autowired
List<TestClass> testClassList= Collections.emptyList();
@GetMapping("/test")
public Object test(){
return testClassList;
}
}
我們調(diào)用得到的結(jié)果是
[
{
"name": "TestClass1"
},
{
"name": "TestClass2"
}
]
我們可以看到所有的testclass都獲取到了。接下來(lái)我們修改下代碼
@RestController
public class TestController {
@Qualifier //我們?cè)谶@增加注解
@Autowired
List<TestClass> testClassList= Collections.emptyList();
@GetMapping("/test")
public Object test(){
return testClassList;
}
}
和上面代碼對(duì)比就是在接收參數(shù)上增加了@Qualifier注解,這樣看是有什么區(qū)別,我們調(diào)用下,結(jié)果如下:
[
{
"name": "TestClass1"
}
]
返回結(jié)果只剩下增加了@Qualifier注解的TestClass對(duì)象,這樣我們就可以理解官方說(shuō)的標(biāo)記篩選是什么意思了。
另外,@Qualifier注解是可以指定value的,這樣我們可以通過(guò)values來(lái)分類篩選想要的對(duì)象了,這里不列舉代碼了,感興趣的同學(xué)自己試試。
1. 死磕18個(gè)Java8日期處理,工作必用!收藏起來(lái)~
2. 使用 Redis 實(shí)現(xiàn)一個(gè)輕量級(jí)的搜索引擎,牛x啊 !
最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊(cè)》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。
謝謝支持喲 (*^__^*)


