@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.
簡單的理解就是:
在使用@Autowire自動注入的時候,加上@Qualifier(“test”)可以指定注入哪個對象;
可以作為篩選的限定符,我們在做自定義注解時可以在其定義上增加@Qualifier,用來篩選需要的對象。這個理解看下面的代碼吧,不好解釋。
首先是對(1)的理解。
//我們定義了兩個TestClass對象,分別是testClass1和testClass2//我們如果在另外一個對象中直接使用@Autowire去注入的話,spring肯定不知道使用哪個對象//會排除異常 required a single bean, but 2 were found@Configurationpublic class TestConfiguration { @Bean("testClass1") TestClass testClass1(){ return new TestClass("TestClass1"); } @Bean("testClass2") TestClass testClass2(){ return new TestClass("TestClass2"); } }
下面是正常的引用
@RestControllerpublic class TestController {//此時這兩個注解的連用就類似 @Resource(name="testClass1")@Autowired@Qualifier("testClass1") private TestClass testClass;@GetMapping("/test") public Object test(){return testClassList; } }
@Autowired和@Qualifier這兩個注解的連用在這個位置就類似 @Resource(name=“testClass1”)
對(2)的理解
@Configurationpublic class TestConfiguration {//我們調整下在testClass1上增加@Qualifier注解@Qualifier@Bean("testClass1") TestClass testClass1(){return new TestClass("TestClass1"); } @Bean("testClass2")TestClass testClass2(){return new TestClass("TestClass2"); } }
@RestControllerpublic class TestController {//我們這里使用一個list去接收testClass的對象@AutowiredList<TestClass> testClassList= Collections.emptyList(); @GetMapping("/test")public Object test(){return testClassList; } }
我們調用得到的結果是
[ {"name": "TestClass1" }, { "name": "TestClass2"} ]
我們可以看到所有的testclass都獲取到了。接下來我們修改下代碼
@RestControllerpublic class TestController {@Qualifier //我們在這增加注解@AutowiredList<TestClass> testClassList= Collections.emptyList();@GetMapping("/test") public Object test(){return testClassList; } }
和上面代碼對比就是在接收參數上增加了@Qualifier注解,這樣看是有什么區別,我們調用下,結果如下:
[ {"name": "TestClass1" } ]
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。