Spring Native Image启动报错:CGLIB运行时增强不支持问题求助
解决Native Image下Spring CGLIB增强报错问题
核心解决方案:关闭配置类的CGLIB代理
Spring的@Configuration类默认会通过CGLIB生成动态代理,用来拦截@Bean方法的内部调用,但Native Image不支持运行时CGLIB类生成。直接给你的配置类添加proxyBeanMethods = false即可关闭这个代理逻辑:
@Configuration(proxyBeanMethods = false) @ComponentScan(basePackageClasses = Main.class) public class Config { }
这个参数会告诉Spring,不需要为该配置类生成代理,所有@Bean方法的调用都会直接执行原始方法,不会被Spring拦截。这完全适配Native Image的运行环境,不会触发任何运行时类生成操作。
其他需要检查的场景
如果你还有其他触发CGLIB增强的逻辑,也需要针对性处理:
- 其他
@Configuration类同样添加proxyBeanMethods = false - 对于
@Transactional、@Cacheable这类需要代理的注解,优先使用JDK动态代理(确保目标类实现了接口),避免CGLIB代理;如果必须用CGLIB,需要提前预生成代理类并放到类路径中(不过这种方式比较繁琐,优先推荐JDK代理) - 检查是否有自定义AOP切面导致的CGLIB增强,同样可以切换为JDK代理或者调整切面逻辑
内容的提问来源于stack exchange,提问作者Martin Mucha
相关产品推荐
相关产品推荐

