Spring升级后ClassCastException:SerializableNoOp无法转为Dispatcher
排查建议
- 检查xxx-3.4.5-SNAPSHOT的依赖树:执行
mvn dependency:tree命令,确认它引入的Spring相关依赖(尤其是spring-aop、spring-core模块)是否与主项目的Spring 6.0.13版本不一致。即便共享同一Maven父工程,该SNAPSHOT依赖仍可能硬编码了旧版本的Spring/Cglib依赖。 - 验证Cglib版本兼容性:Spring 6.0.x依赖Cglib 3.3.x及以上版本,确认xxx依赖是否引入了低于该版本的Cglib,或是直接引入独立Cglib包而非通过Spring传递依赖。
- 强制统一版本:在主项目pom.xml的
<dependencyManagement>块中,强制声明org.springframework:spring-aop、org.springframework:spring-core以及cglib:cglib的版本为Spring 6.0.13对应版本,覆盖xxx依赖的传递依赖版本。 - 检查xxx依赖的代码实现:若能访问xxx依赖的源码,查看它是否直接使用了Cglib的
Dispatcher接口,或是依赖了Spring 5.x版本CglibAopProxy$SerializableNoOp的特定实现——Spring 6.x对这部分内部类做了调整,旧代码存在兼容性问题。 - 尝试升级xxx依赖:联系xxx依赖的维护团队,确认是否有适配Spring 6.x与Java 17的版本,比如升级至xxx-4.x或更高版本的SNAPSHOT。
- 排查重复类冲突:执行
mvn dependency:analyze-duplicate命令,检查是否存在多个jar包包含org.springframework.cglib.proxy.Dispatcher或org.springframework.aop.framework.CglibAopProxy$SerializableNoOp类,引发类加载冲突。
内容的提问来源于stack exchange,提问作者Klaus Schüssler
相关产品推荐
相关产品推荐

