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");
}
}
Spring 5.3.9 is not compitable with this method. I updated my spring version 5.3.26 it works without changing any code.