The bean ‘XXX‘ could not be injected as a ‘XXX‘ because it is a JDK dynamic proxy that implements

关于问题:The bean 'XXX' could not be injected as a 'XXX' because it is a JDK dynamic proxy that implements

问题描述

今天在写代码的时候,新增了一个功能模块,写完代码之后,启动项目无法启动,报出了这么一行的错误:

***************************
APPLICATION FAILED TO START
***************************

Description:

The bean 'contractModifyMapper' could not be injected as a 'com.dophy.dophyerpadmin.module.contract.mapper.SalesContractModifyMapper' 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.

解决过程

字面意思看应该是注入的错误,就在排查相关的注入,排查了一遍又一遍之后,并没有发现问题,之后就百度,发现了如下的解决方法:

在启动类中加上@EnableTransactionManagement(proxyTargetClass = true)

按照他们的说法,这是事务的问题,但是我明明没有动事务,再者之前系统也没有报相关的错误,所以即使这样可以解决问题,我也还是不明白其中的原理。

之后我就继续找相关的原因,最后终于找到了这一段解释:

多半是使用@Resource注解导致的问题
因为@Autowired默认按类型装配,而 @Resource优先按名称装配,如果使用
@Resource
private XabYcdService ycdSerivce;
恰巧有另外一个bean叫“ycdSerivce” 也可能出现这个错误。

看到这里恍然大悟,原来是@Resource导致的错误,之后就进行了相关的排查,果然找到了相关的错误。
在这里插入图片描述

在这里插入图片描述

思考

  1. 通过这个问题说明了对@Resource注解了解的不够深入,导致两个不同的引用,用了统一个名字,导致注入错误。
  2. 遇到问题不能盲目的在网上找解决办法,有的办法虽然能解决,但是还是不明白其中的道理,以后还是会犯,自己应该多思考,遇到问题不能急,捋清楚思路,网上找到的方法也要知其所以然。
  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值