@Autowired 注入 **required a single bean, but 2 were found**

news/2024/12/13 5:29:32

原委

很简单的一个错误,今天在项目中注入StringRedisTemplate对象的时候是这样写的:

@Autowired
private StringRedisTemplate redisTemplate;

然后就报错了:

Field redisTemplate in com.xxx.api.controller.XxxController required a single bean, but 2 were found:- getRedisTemplate: defined by method 'getRedisTemplate' in class path resource [com/xxx/config/RedisConfig.class]- stringRedisTemplate: defined by method 'stringRedisTemplate' in class path resource [org/springframework/boot/autoconfigure/data/redis/RedisAutoConfiguration$RedisConfiguration.class]

一直以为@AutoWired是要么按照类型,要么按照申明的@Qualifier("beanId")进行注入的,和我定义的redisTemplate这个field name有啥关系。。。
但是,项目其他里面都是这么写的,也没有加@Qualifier也没有报错(而且我之前用也没报错),唯一的区别就是field的name不同,别的地方都是stringRedisTemplate,我就改了下,就真的好了。如果按照之前对@AutoWired的理解,显然这属于玄学操作。

原因

@Autowired 注解的注入规则:
经过一些代码的的测试,Autowired默认先按Type,如果同一个Type找到多个bean,则,又按照Name方式比对,如果还有多个,则报出异常。

按照报错提示:StringRedisTemplate这个类型的bean在容器池里面有两个redisTemplatestringRedisTemplate(我们自己项目中配置了一个,spring boot自动配置也给我加了一个)
我定义的是field的name是redisTemplate恰好没有,而stringRedisTemplate是有的,所以没有问题!

解决

解决方式有很多了:

  1. field修改为stringRedisTemplate
  2. 使用@Qualifier指定注入bean
  3. 某些情况下,在冲突bean上加@Primary【不推荐】

END

这个我之前笔记记的都是对的,就是用它时候没有遇到过这些错误,渐渐忘了,直到遇到了才深刻记住注入的流程,笔记里面有些条目以为不重要就没认真记住,记住个大概,然而没到遇到问题前发现不了他的重要/(ㄒoㄒ)/~~。


https://dhexx.cn/news/show-3403728.html

相关文章

dxf素材和dxf、plt、dst看图软件

dxf、plt、dst看图软件:软件主要应用于激光、雕刻等通过二维矢量、位图输出控制的设备上。支持二次开发嵌入AutoCAD、CorelDRAW等绘图软件。软件提供强大的与AutoCAD一致的偏移功能和与CorelDRAW一致的灵活方便的编辑功能,同时支持导入导出线、节点编辑、…

mysql监控管理工具--innotop

author:skate time:2013/02/25 mysql监控管理工具--innotop INNOTOP是一个通过文本模式显示MySQL和InnoDB的监测工具。INNOTOP是用PERL语言写成的,这使它能更加灵活的使用在各种操作平台之上,它能详细的的监控出当前MYSQL和INNOD…

新手上路:转发短信

突然一个电话,非常着急,“短信不能转发呀,这也太坑爹啦”(他上午还在为Windows Phone的理念和功能欣喜若狂呢!) 如果不能转发短信的手机,尤其在中国,那就确实比较II啦。 Windows Pho…

125. 验证回文串(java)

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。 示例 1: 输入: "A man, a plan, a canal: Panama" 输出: true示例 2…

01-常见Dos命令、Java历史、Java跨平台、配置Path环境变量、第一个HelloWorld例子

常见Dos命令 dir: 列出当前目录下的文件以及文件夹md: 创建目录rd: 删除目录cd: 进入指定目录del: 删除文件copy: 复制文件xcopy: 复制目录tree: 列出目录树ren: 文件改名type: 显示文件内容cls: 清屏exit: 退出DOS命令行Java历史 JavaSE(J2S…

计算几何源码

本人收集的一些计算几何源码,包括判断点是否在多边形内,计算多边形面积、方向,直线、线段相交的源码。 bool collinear(double x1, double y1, double x2, double y2, double x3, double y3, double epsilon){ return (fabs((x2 - x1) * (y3…

高EQ谈判技巧的学习

author:skate time:2013/02/27 最近公司安排我负责一项事件的处理谈判,说实话,一直负责财务管理事宜,这种事情参与很少,没什么经验,但既然是谈判,就要充分认识谈判的本质。谈 判也许可以气势凶凶&#xff0…

Python中的一些特殊用法

1、一些特殊的方法__init__(self,...)这个方法在新建对象恰好要被返回使用之前被调用。__del__(self)恰好在对象要被删除之前调用。__str__(self)在我们对对象使用print语句或是使用str()的时候调用。__lt__(self,other)当使用小于运算符&#xff08;<&#xff09;的时候调用…

leetcode 929. 独特的电子邮件地址(python)

每封电子邮件都由一个本地名称和一个域名组成&#xff0c;以 符号分隔。 例如&#xff0c;在 aliceleetcode.com中&#xff0c; alice 是本地名称&#xff0c;而 leetcode.com 是域名。 除了小写字母&#xff0c;这些电子邮件还可能包含 , 或 。 如果在电子邮件地址的本地名…

CorelDRAW和AutoCAD二次开发软件

本人开发的基于CorelDRAW和AutoCAD二次开发软件: 下载地址:http://ishare.iask.sina.com.cn/f/13243807.html 如果以上链接不存在或您需要软件的最新版本&#xff0c;请将您的邮箱发至540006365qq.com。 请您为软件的不足提供宝贵意见。http://blog.csdn.net/liukaimin/article…