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

news/2023/12/10 15:57:39

原委

很简单的一个错误,今天在项目中注入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一致的灵活方便的编辑功能,同时支持导入导出线、节点编辑、…

新手上路:转发短信

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

CorelDRAW和AutoCAD二次开发软件

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

Leopard标签简化Spring配置

2019独角兽企业重金招聘Python工程师标准>>> Leopard标签简化Spring配置 学习如何使用Leopard标签简化Spring配置 本指南将引导您使用Leopard标签简化Spring配置。 How to complete this guide 你可以从头开始并完成每一个步骤,或者您可以绕过你已经熟悉的基本设置步…

subversion中去除不需要的目录

2019独角兽企业重金招聘Python工程师标准>>> 工作中有这样的需求,一个project中由几个component组成,有些部件和我们的工作没有关系,可以去除,但版本控制系统将它们都放在一起。每次更新的时候都是一起更新&#xff0c…

java入门第一步之完成jdk的安装(window)

为了面向更多的人类,我决定重温我的java起步: 要进行java开发第一步就是进行java环境的安装,也就是jdk的按装; 1.由于java被oracle收购了,我们下载jdk也就去oracle的官网进行下载http://www.oracle.com/technetwork/ja…

实力认证 | 景联文科技获评“杭州市2023年度第一批创新型中小企业”

近日,杭州市经济和信息化局发布《杭州市2023年度创新型中小企业评价结果公示》,杭州景联文科技有限公司成功入选,获评杭州市2023年度第一批创新型中小企业。 “创新型中小企业”整体从定性和定量两个维度对中小企业进行全面评估,重…

Linux command2

. CentOS 想查看哪个port开了,却提示命令无效 # yum -y install net-tools2. How to install "wget" command in Linux and how to use multiple : https://www.cyberciti.biz/tips/linux-wget-your-ultimate-command-line-downloader.ht…