@ -26,9 +26,11 @@ import org.springframework.beans.BeansException;
@@ -26,9 +26,11 @@ import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition ;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor ;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory ;
import org.springframework.beans.factory.support.AbstractBeanDefinition ;
import org.springframework.beans.factory.support.BeanDefinitionRegistry ;
import org.springframework.beans.factory.support.DefaultListableBeanFactory ;
import org.springframework.core.Ordered ;
import org.springframework.core.annotation.AnnotationUtils ;
import org.springframework.core.type.AnnotationMetadata ;
import org.springframework.core.type.ClassMetadata ;
import org.springframework.core.type.classreading.MetadataReader ;
@ -122,7 +124,7 @@ public class ConfigurationClassPostProcessor extends AbstractConfigurationClassP
@@ -122,7 +124,7 @@ public class ConfigurationClassPostProcessor extends AbstractConfigurationClassP
if ( beanDef . isAbstract ( ) & & ! includeAbstractBeanDefs )
continue ;
if ( isConfigurationClassBeanDefinition ( beanDef ) )
if ( isConfigurationClassBeanDefinition ( beanDef , beanFactory . getBeanClassLoader ( ) ) )
configBeanDefs . registerBeanDefinition ( beanName , beanDef ) ;
}
@ -181,14 +183,20 @@ public class ConfigurationClassPostProcessor extends AbstractConfigurationClassP
@@ -181,14 +183,20 @@ public class ConfigurationClassPostProcessor extends AbstractConfigurationClassP
* @return whether the BeanDefinition ' s beanClass ( or its ancestry ) is
* { @link Configuration } - annotated , false if no beanClass is specified .
* /
private static boolean isConfigurationClassBeanDefinition ( BeanDefinition beanDef ) {
private static boolean isConfigurationClassBeanDefinition ( BeanDefinition beanDef , ClassLoader classLoader ) {
// accommodating SPR-5655
Assert . isInstanceOf ( AbstractBeanDefinition . class , beanDef ) ;
if ( ( ( AbstractBeanDefinition ) beanDef ) . hasBeanClass ( ) )
return AnnotationUtils . findAnnotation (
( ( AbstractBeanDefinition ) beanDef ) . getBeanClass ( ) , Configuration . class ) ! = null ;
String className = beanDef . getBeanClassName ( ) ;
while ( className ! = null & & ! ( className . equals ( Object . class . getName ( ) ) ) ) {
try {
MetadataReader metadataReader =
new SimpleMetadataReaderFactory ( ) . getMetadataReader ( className ) ;
new SimpleMetadataReaderFactory ( classLoader ) . getMetadataReader ( className ) ;
AnnotationMetadata annotationMetadata = metadataReader . getAnnotationMetadata ( ) ;
ClassMetadata classMetadata = metadataReader . getClassMetadata ( ) ;