Closed as not planned
Description
Hello.
I've a Spring Boot 3.4.5
project that uses the old XML style to configure the application context.
While in Spring Boot 2.1.16
, the below was working fine:
appContext.xml
<context:property-placeholder ignore-resource-not-found="true" location="classpath:/testConfig.properties,/config.properties" />
<import resource="beanContext.xml" />
beanContext.xml
<import resource="infrastructureContext.xml" />
<import resource="functionContext.xml" />
<!-- Other beans -->
infrastructureContext.xml
<context:annotation-config />
<context:component-scan base-package="com.foo.dfi.hiku.commons.util.model.mdf" />
<bean id="bplCall" class="${bpl.class}">
<constructor-arg value="${bpl.server}" />
<constructor-arg value="${bpl.port}" />
<property name="Application" value="${bpl.name}" />
</bean>
<!-- Other beans -->
in Spring Boot 3.4.5
fails with:
2025-05-16 10:38:32,510 [main] ERROR KFFCalculatorApplication:103 - org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [${bpl.class}] for bean with name 'bplCall' defined in file [C:\Daten\gitlab\hiku-kff-calculator\target\classes\infrastructureContext.xml]
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [${bpl.class}] for bean with name 'bplCall' defined in file [C:\Daten\gitlab\hiku-kff-calculator\target\classes\infrastructureContext.xml]
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1585) ~[spring-beans-6.2.6.jar:6.2.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:692) ~[spring-beans-6.2.6.jar:6.2.6]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:660) ~[spring-beans-6.2.6.jar:6.2.6]
at org.springframework.beans.factory.support.AbstractBeanFactory.getType(AbstractBeanFactory.java:738) ~[spring-beans-6.2.6.jar:6.2.6]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAnnotationOnBean(DefaultListableBeanFactory.java:817) ~[spring-beans-6.2.6.jar:6.2.6]
at org.springframework.boot.sql.init.dependency.AnnotationDependsOnDatabaseInitializationDetector.detect(AnnotationDependsOnDatabaseInitializationDetector.java:36) ~[spring-boot-3.4.5.jar:3.4.5]
at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.detectDependsOnInitializationBeanNames(DatabaseInitializationDependencyConfigurer.java:152) ~[spring-boot-3.4.5.jar:3.4.5]
at org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor.postProcessBeanFactory(DatabaseInitializationDependencyConfigurer.java:115) ~[spring-boot-3.4.5.jar:3.4.5]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:363) ~[spring-context-6.2.6.jar:6.2.6]
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:197) ~[spring-context-6.2.6.jar:6.2.6]
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:791) ~[spring-context-6.2.6.jar:6.2.6]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:609) ~[spring-context-6.2.6.jar:6.2.6]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.4.5.jar:3.4.5]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:753) ~[spring-boot-3.4.5.jar:3.4.5]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-3.4.5.jar:3.4.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:318) ~[spring-boot-3.4.5.jar:3.4.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362) ~[spring-boot-3.4.5.jar:3.4.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351) ~[spring-boot-3.4.5.jar:3.4.5]
at com.sixgroup.dfi.hiku.kff.calculator.KFFCalculatorApplication.execute(KFFCalculatorApplication.java:65) [classes/:?]
at com.sixgroup.dfi.hiku.kff.calculator.KFFCalculatorApplication.main(KFFCalculatorApplication.java:59) [classes/:?]
Caused by: java.lang.ClassNotFoundException: ${bpl.class}
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[?:?]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[?:?]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[?:?]
at java.base/java.lang.Class.forName0(Native Method) ~[?:?]
at java.base/java.lang.Class.forName(Class.java:534) ~[?:?]
at java.base/java.lang.Class.forName(Class.java:513) ~[?:?]
at org.springframework.util.ClassUtils.forName(ClassUtils.java:321) ~[spring-core-6.2.6.jar:6.2.6]
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:503) ~[spring-beans-6.2.6.jar:6.2.6]
What I observed is that this is happening only for beans which have dynamic/property-based class names.
In the Spring migration documentation I cannot really spot anything useful, so your help would be highly appreciated here.
Kind regards and thanks.