SpringBoot常用注解-@Qualifier注解的作用和应用-《Java笔记》

admin 2025-10-19 04:47:12 编程 来源:ZONE.CI 全球网 0 阅读模式

Java Spring

@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.

简单的理解就是:(1)在使用@Autowire自动注入的时候,加上@Qualifier("test")可以指定注入哪个对象;(2)可以作为筛选的限定符,在做自定义注解时可以在其定义上增加@Qualifier,用来筛选需要的对象。这个理解看下面的代码吧,不好解释。

功能介绍

首先是对(1)的理解。

  1. //定义了两个TestClass对象,分别是testClass1和testClass2
  2. //如果在另外一个对象中直接使用@Autowire去注入的话,spring肯定不知道使用哪个对象
  3. //会排除异常 required a single bean, but 2 were found
  4. @Configuration
  5. public class TestConfiguration {
  6. @Bean("testClass1")
  7. TestClass testClass1(){
  8. return new TestClass("TestClass1");
  9. }
  10. @Bean("testClass2")
  11. TestClass testClass2(){
  12. return new TestClass("TestClass2");
  13. }
  14. }

下面是正常的引用

  1. @RestController
  2. public class TestController {
  3. //此时这两个注解的连用就类似 @Resource(name="testClass1")
  4. @Autowired
  5. @Qualifier("testClass1")
  6. private TestClass testClass;
  7. @GetMapping("/test")
  8. public Object test(){
  9. return testClassList;
  10. }
  11. }

@Autowired@Qualifier这两个注解的连用在这个位置就类似 @Resource(name="testClass1")对(2)的理解

  1. @Configuration
  2. public class TestConfiguration {
  3. //调整下在testClass1上增加@Qualifier注解
  4. @Qualifier
  5. @Bean("testClass1")
  6. TestClass testClass1(){
  7. return new TestClass("TestClass1");
  8. }
  9. @Bean("testClass2")
  10. TestClass testClass2(){
  11. return new TestClass("TestClass2");
  12. }
  13. }
  14. @RestController
  15. public class TestController {
  16. //这里使用一个list去接收testClass的对象
  17. @Autowired
  18. List<TestClass> testClassList= Collections.emptyList();
  19. @GetMapping("/test")
  20. public Object test(){
  21. return testClassList;
  22. }
  23. }

调用得到的结果是

  1. [
  2. {
  3. "name": "TestClass1"
  4. },
  5. {
  6. "name": "TestClass2"
  7. }
  8. ]

可以看到所有的testclass都获取到了。接下来修改下代码

  1. @RestController
  2. public class TestController {
  3. @Qualifier //在这增加注解
  4. @Autowired
  5. List<TestClass> testClassList= Collections.emptyList();
  6. @GetMapping("/test")
  7. public Object test(){
  8. return testClassList;
  9. }
  10. }

和上面代码对比就是在接收参数上增加了@Qualifier注解,这样看是有什么区别,调用下,结果如下:

  1. [
  2. {
  3. "name": "TestClass1"
  4. }
  5. ]

返回结果只剩下增加了@Qualifier注解的TestClass对象,这样就可以理解官方说的标记筛选是什么意思了。另外,@Qualifier注解是可以指定value的,这样可以通过values来分类筛选想要的对象了。

以太坊cppgolang区别 编程

以太坊cppgolang区别

以太坊是一种去中心化的开源平台,它采用智能合约技术,旨在构建和运行不受干扰的分布式应用程序。作为目前最受欢迎的区块链平台之一,以太坊提供了多种编程语言的支持,其
progolang 编程

progolang

Go语言(Golang)是由Google开发的一门静态类型编程语言。作为一名专业的Golang开发者,我深知这门语言的优势和特点。在本文中,我将介绍Golang
golangn个发送者 编程

golangn个发送者

Golang是一种开源的编程语言,由Google团队开发,旨在提高程序的并发性和简化软件开发过程。在Go语言中,有时需要向多个接收者发送信息。本文将介绍如何在G
golang技能图谱 编程

golang技能图谱

从互联网行业的快速发展到人工智能技术的日益成熟,各种编程语言也应运而生。而在这众多的编程语言中,Golang(即Go)作为一门强大且高效的开发语言备受关注。Go
评论:0   参与:  10