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 36efb12817..515ab363bb 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 @@ -424,8 +424,7 @@ class ConfigurationClassParser { } else { // candidate class not an ImportSelector or ImportBeanDefinitionRegistrar -> process it as a @Configuration class - this.importStack.registerImport(importingClassMetadata.getClassName(), - candidate.getMetadata().getClassName()); + this.importStack.registerImport(importingClassMetadata, candidate.getMetadata().getClassName()); processConfigurationClass(candidate.asConfigClass(configClass)); } } @@ -558,7 +557,7 @@ class ConfigurationClassParser { interface ImportRegistry { - String getImportingClassFor(String importedClass); + AnnotationMetadata getImportingClassFor(String importedClass); } @@ -566,14 +565,14 @@ class ConfigurationClassParser { @SuppressWarnings("serial") private static class ImportStack extends Stack implements ImportRegistry { - private final Map imports = new HashMap(); + private final Map imports = new HashMap(); - public void registerImport(String importingClass, String importedClass) { + public void registerImport(AnnotationMetadata importingClass, String importedClass) { this.imports.put(importedClass, importingClass); } @Override - public String getImportingClassFor(String importedClass) { + public AnnotationMetadata getImportingClassFor(String importedClass) { return this.imports.get(importedClass); } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java index 4a8b1f88dd..7321f6d42e 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java @@ -17,7 +17,6 @@ package org.springframework.context.annotation; import java.beans.PropertyDescriptor; -import java.io.IOException; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -65,7 +64,6 @@ import org.springframework.core.io.ResourceLoader; import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.classreading.CachingMetadataReaderFactory; import org.springframework.core.type.classreading.MetadataReaderFactory; -import org.springframework.core.type.classreading.SimpleMetadataReaderFactory; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -379,38 +377,27 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo } - private static class ImportAwareBeanPostProcessor implements BeanPostProcessor, PriorityOrdered, BeanFactoryAware { + private static class ImportAwareBeanPostProcessor implements BeanPostProcessor, BeanFactoryAware, PriorityOrdered { private BeanFactory beanFactory; @Override - public int getOrder() { - return Ordered.HIGHEST_PRECEDENCE; + public void setBeanFactory(BeanFactory beanFactory) { + this.beanFactory = beanFactory; } @Override - public void setBeanFactory(BeanFactory beanFactory) { - this.beanFactory = beanFactory; + public int getOrder() { + return Ordered.HIGHEST_PRECEDENCE; } @Override public Object postProcessBeforeInitialization(Object bean, String beanName) { if (bean instanceof ImportAware) { ImportRegistry importRegistry = this.beanFactory.getBean(IMPORT_REGISTRY_BEAN_NAME, ImportRegistry.class); - String importingClass = importRegistry.getImportingClassFor(bean.getClass().getSuperclass().getName()); + AnnotationMetadata importingClass = importRegistry.getImportingClassFor(bean.getClass().getSuperclass().getName()); if (importingClass != null) { - try { - AnnotationMetadata metadata = - new SimpleMetadataReaderFactory().getMetadataReader(importingClass).getAnnotationMetadata(); - ((ImportAware) bean).setImportMetadata(metadata); - } - catch (IOException ex) { - // should never occur -> at this point we know the class is present anyway - throw new IllegalStateException(ex); - } - } - else { - // no importing class was found + ((ImportAware) bean).setImportMetadata(importingClass); } } return bean;