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

Spring注解式注入失败:Java 19类文件版本不支持问题求助

Spring注解注入数据库时遇Unsupported class file major version 63错误

我是Spring新手,想用注解实现数据库选择注入,已经在applicationContext.xml里配置了组件扫描,指定扫描com.springDemo包下带@Component("database")注解的类作为数据库实现。当前环境是Java 19、Spring 5.3.9,重装JDK和Spring后问题依然存在,报错如下:

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: [eclipse-workspace\JavaSpring\springIocAnnotation\bin\com\springDemo\ICustomerDal.class]; nested exception is org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn't supported yet: file [eclipse-workspace\JavaSpring\springIocAnnotation\bin\com\springDemo\ICustomerDal.class]; nested exception is java.lang.IllegalArgumentException: Unsupported class file major version 63

相关代码文件

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
       
    <context:component-scan base-package="com.springDemo"></context:component-scan>

</beans>

ICustomerDal.java

package com.springDemo;

public interface ICustomerDal {
    void add();
}

Main.java

package com.springDemo;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext  context = 
        new ClassPathXmlApplicationContext("applicationContext.xml");
                
        ICustomerDal customerDal = context.getBean("database",ICustomerDal.class);
        
        customerDal.add();
            
    }
    
}

mySqlCustomerDal.java

package com.springDemo;

import org.springframework.stereotype.Component;

@Component("database")
public class mySqlCustomerDal implements ICustomerDal{
    String connectionString;
    public String getConnectionString() {
        return connectionString;
    }
    public void setConnectionString(String connectionString) {
        this.connectionString = connectionString;
    }
    @Override
    public void add() {
        System.out.println("Connection String : " +this.connectionString);

        System.out.println("MySQL database added");
    }
    
}

问题原因

这个错误的核心是Spring版本与Java版本不兼容:

  • Java 19的class文件版本号是63
  • Spring 5.3.x系列官方最高只支持到Java 17(class版本61),其内置的ASM库无法识别Java 19的class文件格式

解决办法

办法一:降级Java版本(推荐)

将JDK版本降到Java 17或更低(比如Java 8/11),Spring 5.3.9对这些版本有完善的支持,无需修改其他配置。

办法二:升级Spring版本

如果必须使用Java 19,需要将Spring版本升级到6.x系列(比如Spring 6.0+),Spring 6开始原生支持Java 17及以上版本,包括Java 19。注意升级Spring后,需要同步调整相关依赖的版本,确保兼容性。

额外建议

代码里的mySqlCustomerDal类名不符合Java命名规范,建议改为MySqlCustomerDal(首字母大写),这是Java开发的通用约定,能提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:13:19