Spring中的@Qualifier注解

article/2025/11/9 8:12:02

国庆期间闲来无事,写了一个简单的小程序,小程序名称叫做 IT藏经楼。目的是分享这些年自己积累的一些学习材料,方面大家查找使用,包括电子书、案例项目、学习视频、面试题和一些PPT模板。里面所有材料都免费分享。目前小程序中只发布了非常小的一部分,后续会陆续上传分享。当前版本的小程序页面也比较简单,还在逐渐的优化中。

本文将带你来了解一下Spring中的@Qualifier注解,它解决了哪些问题,以及如何使用它。我们还将了解它与@Primary注解的不同之处。

使用@Autowired注解是Spring依赖注入的绝好方法。但是有些场景下仅仅靠这个注解不足以让Spring知道到底要注入哪个bean。默认情况下,@Autowired按类型装配Spring bean。如果容器中有多个相同类型的bean,则框架将抛出NoUniqueBeanDefinitionException, 以提示有多个满足条件的bean进行自动装配。程序无法正确做出判断使用哪一个,下面就是个鲜活的例子:
在这里插入图片描述
如果我们尝试将FooService加载到我们的上下文中,Spring框架将抛出NoUniqueBeanDefinitionException。这是因为Spring不知道要注入哪个bean。为了避免这个问题,有几种解决方案。那么我们本文要讲解的@Qualifier注解就是其中之一。

通过使用@Qualifier注解,我们可以消除需要注入哪个bean的问题。让我们重新回顾一下前面的例子,看看我们如何通过包含@Qualifier注释来指出我们想要使用哪个bean来解决问题:
在这里插入图片描述

@Qualifier

通过将@Qualifier注解与我们想要使用的特定spring bean的名称一起进行装配,Spring框架就能从多个相同类型并满足装配要求的bean中找到我们想要的,避免让Spring脑裂。我们需要做的是@Component或者@Bean注解中声明的value属性以确定名称。其实我们也可以在Formatter实现类上使用@Qualifier注释,而不是在@Component或者@Bean中指定名称,也能达到相同的效果:
在这里插入图片描述

@Qualifier VS @Primary

还有另一个名为@Primary的注解,我们也可以用来发生依赖注入的歧义时决定要注入哪个bean。当存在多个相同类型的bean时,此注解定义了首选项。除非另有说明,否则将使用与@Primary注释关联的bean 。我们来看一个例子:
在这里插入图片描述
在此示例中,两个方法都返回相同的Employee类型。Spring将注入的bean是方法tonyEmployee返回的bean。这是因为它包含@Primary注解。当我们想要指定默认情况下应该注入特定类型的bean时,此注解很有用。如果我们在某个注入点需要另一个bean,我们需要专门指出它。我们可以通过@Qualifier注解来做到这一点。例如,我们可以通过使用@Qualifier注解来指定我们想要使用johnEmployee方法返回的bean 。值得注意的是,如果@Qualifier和@Primary注释都存在,那么@Qualifier注释将具有优先权。基本上,@ Primary是定义了默认值,而@Qualifier则非常具体。当然@Component也可以使用@Primary注解,这次使用的还是上面3的示例:
在这里插入图片描述
在这种情况下,@ Primary注解指定了默认注入的是FooFormatter,消除了场景中的注入歧义。

通过名称来自动注入

在使用@Autowired进行自动装配时,如果Spring没有其他提示,将会按照需要注入的变量名称来寻找合适的bean。也可以解决依赖注入歧义的问题。让我们看一些基于我们最初的例子的代码:
在这里插入图片描述
在这种情况下,Spring将确定要注入的bean是FooFormatter,因为字段名称与我们在该bean 的@Component或者@Bean注解中使用的值相匹配。

通过对@Qualifier 的探讨,我们知道该注解是用来消除依赖注入冲突的。这种在日常开发,比如 rabbtimq的 队列声明中很常见。小胖哥也通过该注解和其他上述注解的组合使用和对比中展示了一些常用的用法。这将有助于你对spring的依赖注入机制的了解。


http://chatgpt.dhexx.cn/article/8HQQSL6X.shtml

相关文章

@Qualifier的用处

Qualifier的用处 可以对于一个接口,多个实现类,指定具体注入哪个实现类到这个接口类 在Server 实例化的时候没有指明名称,在atuoWire的时候没有用Quality指明用哪一个的时候,这这时会用容器中仅有的那一个对象(单利&am…

@Autowired和@Qualifier

Autowired 的作用是什么? 1、Autowired 是一个注释,它可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。 Autowired 默认是按照类去匹配,配合 Qualifier 指定按照名称去装配 bean。 可以这样理解为…

spring注解@Qualifier的详细用法

环境:springboot2.3.10 一般使用在项目中使用Qualifier来限定注入的Bean。 由于项目中我习惯用Resource注解,所以这里先对Autowired和Resource进行个简单的说明。 Autowired和Resource区别 相同点: Autowired与Resource都可以用来装配Be…

Spring 注解 @Qualifier 详细解析

文章目录 1. 概述2. 痛点3. Qualifier4. Qualifier VS Primary5. 通过名称来自动注入6. 总结 1. 概述 今天带你了解一下 Spring 框架中的 Qualifier 注解,它解决了哪些问题,以及如何使用它。我们还将了解它与 Primary 注解的不同之处。更多的技术解析请…

@Qualifier注解作用

Qualifier 注解作用就是为了给Bean打上一个标记,用来查找bean,代码示例: 创建一个java bean package com.gupaoedu.springcloud.example.demo;public class TestClass {private String name; // getter setter 略 }编写配置类,将这个bean装载…

Spring的注解@Qualifier用法

Spring的注解Qualifier用法 在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢? 根据注入资源的注解不同实现的方式有一点小小的区别 下面上铺垫图 请忽略我的红线 ##在Controller中使用 Autowired注入时 Qualifier的意思是合格…

java连接mysql数据库实现图书馆管理系统

图书馆管理系统,具体功能包括: 1. 用户登录 2. 用户注册 3. 新图书入库 4. 图书信息查询 5. 图书更新(修改) 6. 旧图书删除 7. 办理借阅证登记 8. 图书借阅管理 完整项目:https://download.csdn.net/download/sger123/…

图书馆管理系统(使用数据库实现)

到现在,终于结束了javaSE基础部分的学习。结束前最后一个项目就是使用数据库实现图书管理系统。 整体项目功能流程结构图: 项目开发前的准备: 软件需求说明书 是为了使用户和软件开发者双方对该软件的初始规定有一个共同的理解&…

图书馆管理系统(Java Web)

图书馆管理系统(Java Web) 概述 基于Spring Spring MVC MyBatis的图书馆管理系统,使用Maven进行包管理。主要功能包括:图书查询、图书管理、图书编辑、读者管理、图书的借阅与归还以及借还日志记录等。 项目演示 演示地址 &…

创建和管理图书管理系统数据库

1. 使用对象资源管理器建立名为“book”的数据库。数据文件和日志文件采用默认方式。 2.使用T-SQL命令建立名为“bookmanager”的数据库,并自定义数据文件和日志文件。 create database bookmanager on primary (namebookmanager_data, file…

数据库课程设计实验报告--图书馆管理系统

一、系统平台 开发工具:Eclipse java Mars 数据库 MySQL server,Navicat可视化工具 操作系统:win10 声明:由于该项目已是四年前大一时所做,时隔已久,且本人已不从事java相关工作,恕不能解答…

图书管理系统 数据库课程实验设计

本课设系软件工程大二学生作,拙笔狂言,恭请斧正。 开发工具:Eclipse 2020-12,Microsoft SQL server 2012 程序语言:Java 引 言 选题题目:图书管理系统 选题背景: (1)图书…

图书馆管理系统(数据库版)

图书馆管理系统(数据库版) 目录: 图书馆管理系统(数据库版)项目框架项目分包数据库列表代码分析工具包所用到的接口: 分享一波:总结: 项目框架 项目分包 上面为本次项目的分包建包示…

图书管理系统(数据库)

一、项目分析 1、项目功能分析 项目功能模块主要分为三个模块,登录模块、管理员模块、操作员模块。 登录模块包括登录功能,注册功能,登录日志功能,修改密码以及找回密码。 管理员模块包括工作日志功能、图书借阅金额设定、操作员…

数据库系统设计大作业:图书馆管理系统

数据库系统设计大作业:图书馆管理系统 参考https://blog.csdn.net/dimo__/article/details/84936685中的设计思路,设计了本系统 1 需求分析 针对图书馆的图书管理系统数据库设计,分别对图书馆的读者、一般工作人员和部门负责人进行详细地分…

简单用数据库实现图书管理系统

目录 一、摘要 2、基本功能 二、前言 三、主体 3.1需求分析 3.1.1 数据需求分析 3.1.2 功能需求分析 3.2概要设计 3.2.1 数据字典 3.2.2 ERD(实体关系图) 3.2.3 DFD数据流图 3.3 逻辑设计 3.3.1 E-R模型向关系模型的转换规则 3.3.2 E-R图转…

MySQL数据库期末项目 图书馆管理系统

1 项目需求分析 1.1 项目名称 图书馆管理系统 1.2 项目功能 在以前大多部分图书馆都是由人工直接管理,其中每天的业务和操作流程非常繁琐复杂,纸质版的登记信息耗费了大量的人力物力。因此图书馆管理系统应运而生,该系统采用智能化设计&#…

tar文件是什么?怎么解压?

例如在使用coco数据集的时候,下载下来是这样的两个文件: 恕我无知,之前完全没见过这种格式的文件。 经过一番咨询,原来是一种压缩文件,里面藏了很多内容,看它的大小就能猜到。 这种文件一般的压缩软件貌似…

常用的tar解压命令总结

ヘ^ヽ、  /⌒、  ,   |   ̄7  (⌒r⌒7/   レ   \/ ̄\」 _/         { _フ ●       ゝ _人   ο  ●  ナ   ト、&…

linux中.tar文件怎么解压

linux中.tar文件怎么解压 1、打包压缩tar -cvf etc.tar /app/etc #打包 tar -zcvf pack.tar.gz pack/ #打包压缩为一个.gz格式的压缩包 tar -jcvf pack.tar.bz2 pack/ #打包压缩为一个.bz2格式的压缩包 tar -Jcvf pack.tar.xz pack/ #打包压缩为一个.xz格式的压缩包 2、解…