【CGLIB】当出现 `java.lang.ClassCastException: xxx$$EnhancerByCGLIB$$xxx cannot be cast to yyy` 时,可能的原因是什
当出现java.lang.ClassCastException: xxx$$EnhancerByCGLIB$$xxx cannot be cast to yyy时,可能的原因是什么?问题引入用户问题原文:当出现java.lang.ClassCastException: xxx$$EnhancerByCGLIB$$xxx cannot be cast to yyy时,可能的原因是什么?在一次金融交易核心链路的升级中,我们将一个关键的风控服务从 Spring Boot 2.7 迁移到了 3.0。上线后不久,监控系统就报警:大量交易因ClassCastException而失败,异常信息正是RiskControlService$$EnhancerByCGLIB$$a1b2c3d4 cannot be cast to RiskControlService。这看似荒谬——CGLIB 生成的代理类明明是目标类的子类,为何无法转型?经过数小时的紧急排查,我们发现问题根源并非代码逻辑错误,而是由ClassLoader 隔离和序列化/反序列化引起的“同名不同类”问题。这类问题极其隐蔽,常规的日志和堆栈跟踪往往无法提供足够线索。