这种错误不仅在mapper(dao)层,在service层也会出现~

我当时在本地跑的时候一点问题都没得有,因为我的这个项目我只拉下来一个模块,并没有把其他模块拉下来,结果在提交代码往测试环境上推了后项目直接起不来,并报了如下错误~

错误信息:

 
Description:

The bean 'attachMapper' could not be injected as a 'org.macrocloud.modules.sys.mapper.ProcessInspectionAttachMapper' 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.
 

问题代码:

 
@Service
@Slf4j
public class BtProcessInspectionServiceImpl extends ServiceImpl<BtProcessInspectionMapper, BtProcessInspectionEntity> implements IBtProcessInspectionService {

    @Autowired
    private ISysClient iSysClient;

    @Resource
    private BtProcessInspectionAttachMapper attachMapper;

    @Resource
    private ProcessResourceMapper resourceMapper;

    @Resource
    private ResourceInfoMapper infoMapper;
 

原因:

根本原因是因为什么呢?
@Resource 是根据名字找对象,谁的名字呢?
它有个寻找的优先级,先找与被注解的相同的 变量 的名,如果又就直接使用,如果没有就会根据类的名字找,如果项目中恰好存在相同名称的变量名,那么在被注解拿来用时就会发现存在问题并报以上错误(这也是为什么在我本地的时候代码不报错,合并到测试环境后出现问题的原因,因为我本的变量较少,没有引发此问题,测试环境代码模块较多,问题就很容易浮现出来了)。

解决办法

代码中引入的其他的Mapper类的对象名写的太简单了【attachMapper、resourceMapper、infoMapper】,应该是和其类名保持一致(除首字母需小写外),例如:btProcessInspectionAttachMapper、processResourceMapper、resourceInfoMapper;这样就可以了;