升级Spring至5.0.19.RELEASE后出现ReflectUtils defineClass方法不存在错误
问题解决方案
错误根因
该java.lang.NoSuchMethodError报错完全由Spring生态内部依赖版本不兼容导致,和BouncyCastle版本升级无关:
Spring 5.0.19.RELEASE内置的cglib依赖中,org.springframework.cglib.core.ReflectUtils的defineClass方法签名发生了变更,而当前使用的Spring Data Couchbase版本仍在调用旧签名的对应方法,找不到匹配方法就会抛出该异常。
解决方案
- 方案一(推荐):升级Spring Data相关依赖到适配版本
将Spring Data Commons升级到2.0.x系列最新版本、Spring Data Couchbase升级到3.0.x系列最新版本即可,这两个版本系列是官方明确适配Spring 5.0.x的版本,已修复cglib方法签名不匹配的问题。 - 方案二:回退Spring Core版本
如果不希望改动现有Spring Data相关依赖,可将Spring Core版本回退到5.0.12.RELEASE及更早版本,这些版本中ReflectUtils的defineClass方法仍为旧签名,可适配现有Spring Data依赖。 - 方案三(仅临时测试用,不建议生产使用):关闭动态属性访问器生成
在项目配置文件中添加如下配置,强制Spring Data直接通过字段反射访问属性,跳过cglib动态生成访问类的逻辑,绕开报错:spring.data.mapping.property-accessor-strategy=field
内容的提问来源于stack exchange,提问作者Sachin Darade
相关产品推荐
相关产品推荐

