Search code examples
javaxmlspring

Annotation based Injection failed


I am new at spring. I would like to use annotation to inject database selection. I'm giving the package name to the xml file and the method runs all the files and trying to locate @Component("database") if it finds then uses it as the selected database.

Using Java 19

Using Spring 5.3.9

I tried to reinstall the jdk and spring it didnt change anything.

I'm getting this error.

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

Here is my files:

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");
    }
    
}


Solution

  • Spring 5.3.9 is not compitable with this method. I updated my spring version 5.3.26 it works without changing any code.