diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java index 73d84f8c3f..2901e5cea0 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java @@ -257,6 +257,16 @@ class ConfigurationClassParser { Class clazz = ((StandardAnnotationMetadata) metadata).getIntrospectedClass(); return new StandardAnnotationMetadata(clazz.getSuperclass(), true); } + else if (superclass.startsWith("java")) { + // never load core JDK classes via ASM, in particular not java.lang.Object! + try { + return new StandardAnnotationMetadata( + this.resourceLoader.getClassLoader().loadClass(superclass), true); + } + catch (ClassNotFoundException ex) { + throw new IllegalStateException(ex); + } + } else { MetadataReader reader = this.metadataReaderFactory.getMetadataReader(superclass); return reader.getAnnotationMetadata(); @@ -313,7 +323,8 @@ class ConfigurationClassParser { if (new AssignableTypeFilter(ImportSelector.class).match(reader, this.metadataReaderFactory)) { // the candidate class is an ImportSelector -> delegate to it to determine imports try { - ImportSelector selector = BeanUtils.instantiateClass(Class.forName(candidate), ImportSelector.class); + ImportSelector selector = BeanUtils.instantiateClass( + this.resourceLoader.getClassLoader().loadClass(candidate), ImportSelector.class); processImport(configClass, selector.selectImports(importingClassMetadata), false); } catch (ClassNotFoundException ex) { @@ -323,7 +334,8 @@ class ConfigurationClassParser { else if (new AssignableTypeFilter(ImportBeanDefinitionRegistrar.class).match(reader, metadataReaderFactory)) { // the candidate class is an ImportBeanDefinitionRegistrar -> delegate to it to register additional bean definitions try { - ImportBeanDefinitionRegistrar registrar = BeanUtils.instantiateClass(Class.forName(candidate), ImportBeanDefinitionRegistrar.class); + ImportBeanDefinitionRegistrar registrar = BeanUtils.instantiateClass( + this.resourceLoader.getClassLoader().loadClass(candidate), ImportBeanDefinitionRegistrar.class); invokeAwareMethods(registrar); registrar.registerBeanDefinitions(importingClassMetadata, registry); }