记一个 @Resource BUG

严格来说并不是BUG,只是我对这个注解理解有误

场景: 项目中存在两个分支,需要我将第一个分支中的代码复制到第二个分支中,并将其中的controller,service,mapper单独复制一份并在类名前加上前缀

service中的bean的注入方式是@Resource,变量名就是类名的小写,我将mapper复制一份之后,service只更改了注入Bean的类名,没有修改bean的变量名,然后直接报错了

复制代码
Exception encountered during context initialization - cancelling refresh attempt: 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '一个Controller': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '一个ServiceImpl': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '一个ServiceImpl': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name '一个ServiceImpl': Injection of resource dependencies failed; nested exception is 
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named '同下的Mapper' is expected to be of type '全类名.Mapper' but was actually of type 'com.sun.proxy.$Proxy341'

The bean 'xxxMapper' could not be injected as a '全类名.前缀XxxMapper' because it is a JDK dynamic proxy that implements:
	com.baomidou.mybatisplus.core.mapper.BaseMapper


Action:

Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching.

甚至还报redis连接超时.....

我下意识的认为是mybatis中的xml写的有问题(这玩意出问题之后报错信息也挺奇怪的),于是一个个找,一个个看是哪个文件,捣鼓了两个小时也没找到啥问题,最后才发现是注入的问题

我只知道 @Resource 会先使用BeanName注入变量,被spring注册的Bean使用类名小写开头作为beanName,但是我不知道@Resource使用的BeanName是TM的变量名啊,这就导致使用变量名查找到的bean不能被注入到我复制出来的那个bean中,并且由于找到了bean还不会使用type来继续查找bean。。。这就导致查找的bean不能被注入到变量中导致报错,回过头来发现原本的报错信息好像挺准确的...

最后将注入方式改成了@Autowired就能正常启动了(或者把变量名改了)

相关推荐
用户3521802454752 小时前
🥯2025 年终极避坑指南:Spring Boot 2.7 + 3.2 混合集群的 Redis + OAuth2 序列化血泪史
java·后端·spring cloud
怎么就重名了2 小时前
记录Qt的UDP通信丢包问题
开发语言·qt·udp
晴天飛 雪2 小时前
Spring Boot 上传shp压缩包解析多少地块
java·spring boot
superman超哥2 小时前
Rust 闭包的定义与捕获:所有权系统下的函数式编程
开发语言·后端·rust·函数式编程·rust闭包·闭包的定义与捕获
曹牧2 小时前
Java:Math.abs()‌
java·开发语言·算法
期待のcode2 小时前
Java的泛型
java·开发语言
沐知全栈开发2 小时前
PostgreSQL 删除数据库指南
开发语言
FPGAI2 小时前
Java学习之计算机存储规则、数据类型、标识符、键盘录入、IDEA
java·学习
!停2 小时前
c语言动态申请内存
c语言·开发语言·数据结构