Skip to content

Commit a92f7dd

Browse files
committed
ConfigurationClassPostProcessor consistently uses ClassLoader, not loading core JDK classes via ASM
Issue: SPR-10058
1 parent 8a422f4 commit a92f7dd

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,16 @@ protected AnnotationMetadata doProcessConfigurationClass(
257257
Class<?> clazz = ((StandardAnnotationMetadata) metadata).getIntrospectedClass();
258258
return new StandardAnnotationMetadata(clazz.getSuperclass(), true);
259259
}
260+
else if (superclass.startsWith("java")) {
261+
// never load core JDK classes via ASM, in particular not java.lang.Object!
262+
try {
263+
return new StandardAnnotationMetadata(
264+
this.resourceLoader.getClassLoader().loadClass(superclass), true);
265+
}
266+
catch (ClassNotFoundException ex) {
267+
throw new IllegalStateException(ex);
268+
}
269+
}
260270
else {
261271
MetadataReader reader = this.metadataReaderFactory.getMetadataReader(superclass);
262272
return reader.getAnnotationMetadata();
@@ -313,7 +323,8 @@ private void processImport(ConfigurationClass configClass, String[] classesToImp
313323
if (new AssignableTypeFilter(ImportSelector.class).match(reader, this.metadataReaderFactory)) {
314324
// the candidate class is an ImportSelector -> delegate to it to determine imports
315325
try {
316-
ImportSelector selector = BeanUtils.instantiateClass(Class.forName(candidate), ImportSelector.class);
326+
ImportSelector selector = BeanUtils.instantiateClass(
327+
this.resourceLoader.getClassLoader().loadClass(candidate), ImportSelector.class);
317328
processImport(configClass, selector.selectImports(importingClassMetadata), false);
318329
}
319330
catch (ClassNotFoundException ex) {
@@ -323,7 +334,8 @@ private void processImport(ConfigurationClass configClass, String[] classesToImp
323334
else if (new AssignableTypeFilter(ImportBeanDefinitionRegistrar.class).match(reader, metadataReaderFactory)) {
324335
// the candidate class is an ImportBeanDefinitionRegistrar -> delegate to it to register additional bean definitions
325336
try {
326-
ImportBeanDefinitionRegistrar registrar = BeanUtils.instantiateClass(Class.forName(candidate), ImportBeanDefinitionRegistrar.class);
337+
ImportBeanDefinitionRegistrar registrar = BeanUtils.instantiateClass(
338+
this.resourceLoader.getClassLoader().loadClass(candidate), ImportBeanDefinitionRegistrar.class);
327339
invokeAwareMethods(registrar);
328340
registrar.registerBeanDefinitions(importingClassMetadata, registry);
329341
}

0 commit comments

Comments
 (0)