You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot添加Repository后抛Could not generate CGLIB subclass错误怎么办

问题根因
  1. 核心根因是Spring Boot 2.6.0内置的Spring Core 5.3.13版本与JDK 17及以上版本存在CGLIB代理生成兼容性Bug:该版本依赖的CGLIB在为带数组类型参数的方法生成代理类时,会出现类名拼接错误,直接抛出你遇到的Illegal class name "java/lang/Class[]"异常,和你排查的一致,不是你的类用了final修饰或者可见性不足导致的。
  2. 代码存在笔误:你在调度类中注入的Repository变量名为namedParameterMyObjectRepository,但调用save方法时使用的变量名是namedParameterDolarPriceRepository,命名不一致会在代理问题解决后触发变量找不到的错误,需要同步修正。
解决方案
  • 最优方案:将Spring Boot版本升级到2.6.1及以上,该版本已经官方修复了CGLIB与高版本JDK的兼容性问题,无需修改其他业务代码即可解决代理生成异常。
  • 临时兼容方案(若暂时无法升级Spring Boot版本):在项目配置文件application.properties中添加以下配置,关闭CGLIB代理,强制使用JDK动态代理:
    spring.aop.proxy-target-class=false
    
    该方案要求自定义Repository必须实现对应接口,你的代码已经实现了MyObjectRepository接口,满足使用条件。
  • 修正代码笔误:将PriceFetcherScheduledTask类中fetchMyObject方法内的namedParameterDolarPriceRepository.save修改为namedParameterMyObjectRepository.save,保证变量名统一。

内容的提问来源于stack exchange,提问作者Igor Leal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:15:07