NoUniqueBeanDefinitionException: expected single matching bean but found 2

news2024/11/24 3:33:58

文章目录

  • 前言
  • 一、错误现象
  • 二、原因分析
  • 三、解决办法
  • 总结


前言

看到这个错误,大致也能猜出错误的原因,就是spring中注入的bean重复了,本来应该是单利的bean,但是现在却找到了两个,那么导致这个问题的原因是什么?如何解决呢?


一、错误现象

运行项目或者运行junit测试,直接报错,抛出错误的位置:
异常抛出
错误控制台日志:
在这里插入图片描述


二、原因分析

其实产生这种错误的原因有以下三种:

  • 1 手欠

例如: 你有 A B 两个service ,都要注入,但是你注入的时候,手欠的加入了注入的名字, A B 都注入为了 a,就会抛出如上错误;

  • 2 同一个类被多次扫描,且扫描结果不一致

例如: 我今天遇到的这个错误就是,两次扫描,两次扫描key不一致,一次是类,一次是类全路径名,但是都放入了spring中,抛出如上错误;

@Nullable
	public Object resolveNotUnique(ResolvableType type, Map<String, Object> matchingBeans) throws BeansException {
		throw new NoUniqueBeanDefinitionException(type, matchingBeans.keySet());
	}

正常来说这段代码, matchingBeans.keySet() 的长度应该为1 ,但是我找到了两个;

  • 3 虽然不是手欠,但是仍然是第一个错误

有两个名为A 的bean,但是包不同, com.ceshi.A 和 com.ce.shi.A,但是注入的时候,都为 a;


三、解决办法

其实第一种和第三种,都比较解决;
第一种: 别手欠
第三种: 起不同名字,或者注入不同的名字
第二种:
其实这种是由于编码不规范,或者任意增加包扫描导致的错误,造成了两次扫描;例如 com.ceshi.A

第一次扫描: SpringBootApplication 默认就会扫描包下所有要注入的bean,此时扫描到的bean名称,在不自定义的情况下,就为 a;
第一次扫描: 自己自定义了一个扫描类,且开启了一个东西
nameGenerator = FullyQualifiedAnnotationBeanNameGenerator.class
它会导致你扫描的所有bean都变为了全路径bean名称,就为 com.ceshi.A

自定义包扫描

至此,发现了此问题的原因,那么解决办法就是,在原有的启动类上,也加入这个开启全路径名称bean 的注入;


总结

那么为什么他会自定义了一个包扫描,且开启了nameGenerator = FullyQualifiedAnnotationBeanNameGenerator.class呢?
其实不怪他:

因为这个项目要引入很多自定的jar包,jar包中就是有与目前同名的bean要注入,但是包路径不同,为了都可以注入成功,所以最终也只能采用此办法,相当于全局都开启了这个 配置;

这个问题,百度了半个多小时也没有解决,虽然这篇文字写的不多,但是我相信一定可以派上大用场,貌似目前还没有解决这个问题的办法,以及原因分析;
字少事儿大原则~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/988779.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修改Docker镜像默认下载地址

1、安装完docker desktop后&#xff0c;先不要打开 2、新建目录 D:\ProgramData\Docker 3、在C:\Users\你的用户名\AppData\Local下&#xff0c;打开cmd或者powershell执行以下命令&#xff0c;命令语法略有不同。 powershell命令&#xff1a; cmd /c mklink /J Docker D:\Pro…

知识图谱实战应用27-基于多模态数据的洪涝灾害知识图谱构建与实际应用

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用27-基于多模态数据的洪涝灾害知识图谱构建与实际应用。今年以来,很多省份都经历了暴雨肆虐,并造成了洪涝灾害,洪涝灾害是一种常见而严重的自然灾害,对人类社会和环境造成了巨大的影响。为了有效地应对洪涝灾害,构建…

Foxboro FBM232 P0926GW以太网通信模块

以太网通信&#xff1a;FBM232 P0926GW 模块支持以太网通信&#xff0c;可用于与其他设备、传感器、执行器和监控系统进行数据交换。 通信协议&#xff1a;模块通常支持多种通信协议&#xff0c;如Modbus TCP/IP、EtherNet/IP 等&#xff0c;以便与不同类型的设备和系统进行通…

3.xaml Label TextBox PasswordBox Button

1. Label TextBox PassWordBox Button a.运行图片 b.Xaml源码 <Grid><!--VerticalAlignment 控件竖直--><!--HorizontalAlignment 控件水平--><!--VerticalConte

etcd选举源码分析和例子

本文主要介绍etcd在分布式多节点服务中如何实现选主。 1、基础知识 在开始之前&#xff0c;先介绍etcd中 Version, Revision, ModRevision, CreateRevision 几个基本概念。 1、version 作用域为key&#xff0c;表示某个key的版本&#xff0c;每个key刚创建的version为1&#…

切片机制和MR工作机制

InputFormat基类 TextInputFormat&#xff1a;TextInputFormat是默认的FileInputFormat实现类。按行读取每条记录。键是存储该行在整个文件中的起始字节偏移量&#xff0c; LongWritable类型。 CombineTextInputFormat&#xff1a;CombineTextInputFormat用于小文件过多的场景…

什么是正向代理和反向代理

一、什么是正向代理 正向代理&#xff08;Forward Proxy&#xff09;是一种代理服务器&#xff0c;它位于客户端和服务端之间&#xff0c;代表客户端向其他服务器发送请求。 一般使用的场景就是&#xff0c;当客户端无法直接访问某些资源时&#xff0c;可以通过正向代理来访问…

QML实现文件十六进制数据展示

前言 将一个二进制文件直接拖放到Qt Creator中可以直接查看到以十六进制显示的数据格式&#xff0c;如&#xff1a; 要实现一个这样的效果&#xff0c;还是要花不少时间的。 在网上找了挺多示例&#xff0c;其中一个开源代码效果不错&#xff08;参考这里&#xff09;&#…

Linux:【Mysql】Centos7安装mysql8.0

目录 一、环境及版本介绍 二、安装前准备 三、开始安装 一、环境及版本介绍 Linux环境&#xff1a;Centos7 Mysql版本&#xff1a;8.0.26 安装时使用的用户&#xff1a;root 二、安装前准备 1.1、下载Centos7镜像 网上寻找相关资源即可 1.2、下载VMwareWorkstation Pro并…

cpolar内网穿透

目录 一、引言二、什么是cpolar三、内网穿透四、如何使用cpolar1、下载cpolar软件安装包2、注册cpolar账号3、使用cpolar 一、引言 当我们完成了一个tomcat的web项目之后&#xff0c;如果我们想让其他电脑访问到这个项目&#xff0c;我们可以让其他电脑和本机连接到同一个局域…

python如何学习

功能如此强大、高效的Python&#xff0c;却非常的简单好学&#xff0c;这让学它的同学爱不释手&#xff0c;也让越来越多的互联网企业开始用Python来做主要的开发语言&#xff0c;比如谷歌、Facebook&#xff08;现Meta&#xff09;、豆瓣、知乎等知名互联网公司都在使用Python…

idea2018修改大小写提示(敏感)信息

操作步骤如下&#xff1a; File > Settings > Editor > Code Completion > Code Completion&#xff08;默认是首字母&#xff0c;选为none将不区分大小写&#xff09;

花生壳内网穿透+Windows系统,如何搭建网站?

1. 准备工作 在百度搜索“Win7下安装ApachePHPMySQL”&#xff0c;根据搜到的教程自行安装WAMP环境。 如果在网页上键入http://127.0.0.1/ 出现以下页面表示您的服务器已经建好&#xff0c;下一步就是关键&#xff0c;如何通过花生壳内网穿透&#xff0c;让外网的用户访问到您…

1.4 空间中的曲线和曲面

空间中的曲线与曲面 知识点1 曲面方程定义 定义1 如果曲面 S 与方程F (x,y,z ) 0 有下述关系&#xff1a; &#xff08;1&#xff09; 曲面 S 上的任意点的坐标都满足此方程 &#xff08;2&#xff09;不在曲面S上的点的坐标不满足此方程 则F&#xff08;x,y,z&#xff0…

无涯教程-JavaScript - IMEXP函数

描述 IMEXP函数以x yi或x yj文本格式返回复数的指数。复数的指数为- $$e ^ {((x yi)} e ^ xe ^ {yi} e ^ x(\cos y i \sin y)$$ 语法 IMEXP (inumber)争论 Argument描述Required/OptionalInumberA complex number for which you want the exponential.Required Not…

第一章: Mysql体系结构和存储引擎

文章目录 1.1 定义数据库和实例1.2 Mysql体系结构1. 3 Mysql存储引擎1. 4 常见问题解答1.5 存储引擎相关操作语法1.6 连接Mysql 1.1 定义数据库和实例 数据库和实例的区别&#xff1f; 数据库是物理操作系统或其他形式文件的集合&#xff08;数据库是文件的集合&#xff0c;是依…

Numpy包常用科学计算方法总结

numpy包的计算性能是python原始方法计算性能的几十倍到几百倍 一、引入numpy包&#xff1a; import numpy as np 二、创建数组: #定义一个pyth…

微信分账报错1908(请求中含有未在API文档中定义的参数)

开发指引-分账 | 微信支付合作伙伴平台文档中心 问题描述&#xff1a;根据微信分账文档&#xff0c;在下单接口添加是否分账参数后&#xff0c;报错如下 Client error: POST https://api.mch.weixin.qq.com/v3/pay/partner/transactions/jsapi 400 Bad Request {"code…