Skip to content

Commit 7384c3d

Browse files
committed
ConfigurationClassPostProcessor consistently uses ClassLoader, not loading core JDK classes via ASM
Issue: SPR-10058
1 parent b016c8d commit 7384c3d

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

org.springframework.context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,16 @@ protected AnnotationMetadata doProcessConfigurationClass(
252252
Class<?> clazz = ((StandardAnnotationMetadata) metadata).getIntrospectedClass();
253253
return new StandardAnnotationMetadata(clazz.getSuperclass(), true);
254254
}
255+
else if (superclass.startsWith("java")) {
256+
// never load core JDK classes via ASM, in particular not java.lang.Object!
257+
try {
258+
return new StandardAnnotationMetadata(
259+
this.resourceLoader.getClassLoader().loadClass(superclass), true);
260+
}
261+
catch (ClassNotFoundException ex) {
262+
throw new IllegalStateException(ex);
263+
}
264+
}
255265
else {
256266
MetadataReader reader = this.metadataReaderFactory.getMetadataReader(superclass);
257267
return reader.getAnnotationMetadata();
@@ -317,7 +327,8 @@ private void processImport(ConfigurationClass configClass, String[] classesToImp
317327
if (new AssignableTypeFilter(ImportSelector.class).match(reader, this.metadataReaderFactory)) {
318328
// the candidate class is an ImportSelector -> delegate to it to determine imports
319329
try {
320-
ImportSelector selector = BeanUtils.instantiateClass(Class.forName(candidate), ImportSelector.class);
330+
ImportSelector selector = BeanUtils.instantiateClass(
331+
this.resourceLoader.getClassLoader().loadClass(candidate), ImportSelector.class);
321332
processImport(configClass, selector.selectImports(importingClassMetadata), false);
322333
}
323334
catch (ClassNotFoundException ex) {
@@ -327,7 +338,8 @@ private void processImport(ConfigurationClass configClass, String[] classesToImp
327338
else if (new AssignableTypeFilter(ImportBeanDefinitionRegistrar.class).match(reader, metadataReaderFactory)) {
328339
// the candidate class is an ImportBeanDefinitionRegistrar -> delegate to it to register additional bean definitions
329340
try {
330-
ImportBeanDefinitionRegistrar registrar = BeanUtils.instantiateClass(Class.forName(candidate), ImportBeanDefinitionRegistrar.class);
341+
ImportBeanDefinitionRegistrar registrar = BeanUtils.instantiateClass(
342+
this.resourceLoader.getClassLoader().loadClass(candidate), ImportBeanDefinitionRegistrar.class);
331343
registrar.registerBeanDefinitions(importingClassMetadata, registry);
332344
}
333345
catch (ClassNotFoundException ex) {

0 commit comments

Comments
 (0)