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

Spring启动报错IllegalStateException:无法加载配置类JavaConfig

问题原因

你的配置类、启动类代码写法没有错误,报错核心原因是使用的Spring版本与当前运行环境的JDK版本不兼容。
异常栈中明确抛出InaccessibleObjectException,提示module java.base does not "opens java.lang" to unnamed module,这是JDK9及以上版本引入模块访问限制导致的:你当前使用的是Spring 4.x这类老版本,Spring在处理@Configuration标注的配置类时,会通过内置CGLIB生成动态代理,过程中需要反射调用JDK核心类的受保护方法,高版本JDK默认禁止这种跨模块的反射访问,直接触发异常。

解决方案

按优先级从高到低可选以下方案:

  • 优先选择版本对齐:将运行环境JDK切换为JDK8,Spring 4.x/5.0.x系列与JDK8兼容性最佳,无需额外配置即可正常运行,适合新手快速排错。
  • 升级Spring版本:将Spring依赖升级到5.3.x及以上正式版本,高版本Spring已经完成高版本JDK的适配,不会触发CGLIB反射访问的模块限制;如果使用SpringBoot,可选择2.7.x版本适配JDK11,3.x版本适配JDK17。
  • 临时绕过限制:如果暂时无法调整JDK或Spring版本,可在JVM启动参数中添加如下配置,放开对应模块的访问权限:
--add-opens java.base/java.lang=ALL-UNNAMED

该方案仅用于临时调试,不建议在生产环境使用,长期运行还是建议做官方推荐的版本适配。

相关代码与异常信息

配置类代码

package SpringAnnotPckg;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("SpringAnnotPckg")
public class JavaConfig {
    public JavaConfig() {
        
    }
}

主启动类代码

package SpringAnnotPckg;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class TestJavaconfig {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(JavaConfig.class);
Car car=context.getBean("audiCar",Car.class);
car.print();
context.close();
    }
}

异常信息

Jul 06, 2022 1:19:01 PM org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@3fd7a715: startup date [Wed Jul 06 13:19:01 IST 2022]; root of context hierarchy
Exception in thread "main" java.lang.IllegalStateException: Cannot load configuration class: SpringAnnotPckg.JavaConfig
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:403)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:249)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:281)
    at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:125)
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)
    at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84)
    at SpringAnnotPckg.TestJavaconfig.main(TestJavaconfig.java:9)
Caused by: java.lang.ExceptionInInitializerError
    at org.springframework.context.annotation.ConfigurationClassEnhancer.newEnhancer(ConfigurationClassEnhancer.java:122)
    at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:110)
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:393)
    ... 7 more
Caused by: org.springframework.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @641147d0
    at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:464)
    at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:336)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91)
    at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
    at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116)
    at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:291)
    at org.springframework.cglib.core.KeyFactory$Generator.create(KeyFactory.java:221)
    at org.springframework.cglib.core.KeyFactory.create(KeyFactory.java:174)
    at org.springframework.cglib.core.KeyFactory.create(KeyFactory.java:153)
    at org.springframework.cglib.proxy.Enhancer.<clinit>(Enhancer.java:73)
    ... 10 more
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @641147d0
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
    at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
    at org.springframework.cglib.core.ReflectUtils$1.run(ReflectUtils.java:61)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
    at org.springframework.cglib.core.ReflectUtils.<clinit>(ReflectUtils.java:52)
    at org.springframework.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:243)
    at org.springframework.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
    at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:329)
    ... 22 more

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:45:31