From a92f7dd474406a02844ec635fde6c22eb8ef8456 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 5 Dec 2012 19:12:05 +0100 Subject: [PATCH] ConfigurationClassPostProcessor consistently uses ClassLoader, not loading core JDK classes via ASM Issue: SPR-10058 --- .../annotation/ConfigurationClassParser.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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); }