报错
运行项目的时候报错:
The bean ‘dataTokenMapper’ could not be injected because it is a JDK dynamic
翻译图片中的意思:
有个对象名叫dataTokenMapper,这个对象类型是个AttributeDataTokenMapper类型,但是却注入了DataTokenMapper类型,所以注入失败了。
寻找目标:
private AttributeDataTokenMapper dataTokenMapper;
发现确实有个地方是这样写的。
分析原因:
出现这个问题主要是两个因素导致的,缺一不可。
1.我有两个类,他们会生成两个代理类,分别是AttributeDataTokenMapper类和DataTokenMapper类。他们的代理对象的名称是类名首字母小写,attributeDataTokenMapper,dataTokenMapper
2.我使用他们的时候,使用的@Resource注入的,而@Resource的注入策略是:
①优先根据你的对象名注入,
比如我的@Resource标注的private AttributeDataTokenMapper dataTokenMapper
则,这里即使你的类型是AttributeDataTokenMapper,但是你的对象名是dataTokenMapper,则还是会注入DataTokenMapper类型的代理类。所以会出现上面的报错了
②通过@Resource的byType注入指定类型
解决方案
- 1.private AttributeDataTokenMapper dataTokenMapper 的注解@Resource改成@Autowired,因为@Autowired默认是byType注入
- 2.private AttributeDataTokenMapper dataTokenMapper 的注解@Resource使用byType指定类型,或者byName=attributeDataTokenMapper
- 3.private AttributeDataTokenMapper dataTokenMapper 的对象名称dataTokenMapper改成其他的