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

运行基于注解的简单Spring项目报错,无法加载配置类该如何解决?

问题根因

报错核心是你使用的低版本Spring框架依赖的旧版CGLIB动态代理工具,不兼容Java 9及以上版本的JPMS模块系统:旧版CGLIB需要反射调用JDK内部的ClassLoader.defineClass方法,高版本Java默认禁止了这类非法的跨模块反射访问,所以抛出权限异常。

修复方案

你可以根据自己的需求选择任意一种方案解决:

  • 方案1(最推荐):升级Spring框架到适配高版本Java的版本
    直接将Spring版本升级到5.x及以上的稳定版本,这类版本已经完成了Java 9+模块系统的适配,不需要额外修改配置就能正常运行。注意所有Spring相关依赖的版本需要保持一致,避免出现版本冲突问题。
  • 方案2(临时兼容,无需修改依赖版本):添加JVM启动参数开放模块权限
    如果你暂时不想升级Spring版本,可以在运行时给JVM添加开放模块访问的参数:
    1. 在Eclipse中右键点击Driver类,选择Run As -> Run Configurations
    2. 找到对应Driver类的启动配置项,切换到Arguments选项卡
    3. 在VM arguments输入框中添加如下参数:
      --add-opens java.base/java.lang=ALL-UNNAMED
      
    如果后续仍然提示其他模块的访问权限错误,可以按需追加对应模块的开放参数,示例如下:
    --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED
    
  • 方案3:降级JDK版本到Java 8
    Java 8没有引入JPMS模块系统,不存在跨模块反射访问的限制,可以完美适配老版本的Spring框架,直接将项目的JDK编译和运行版本切换为Java 8即可解决问题。
额外注意事项

你贴出的文件列表存在笔误,标注为HelloWorld.java的文件实际内容是Driver类的代码,请检查是否漏写了HelloWorld类,同时需要给HelloWorld类添加@Component("helloWorld")注解,否则Spring组件扫描无法识别这个类,解决上述模块问题后还会抛出找不到helloWorld Bean的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:06:04