Process @ImportResource with current ResourceLoader
Issue: SPR-7973
This commit is contained in:
parent
704b229cc7
commit
4cdb04ab25
|
|
@ -39,13 +39,14 @@ import org.springframework.beans.factory.parsing.Problem;
|
||||||
import org.springframework.beans.factory.parsing.ProblemReporter;
|
import org.springframework.beans.factory.parsing.ProblemReporter;
|
||||||
import org.springframework.beans.factory.parsing.SourceExtractor;
|
import org.springframework.beans.factory.parsing.SourceExtractor;
|
||||||
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||||
|
import org.springframework.beans.factory.support.AbstractBeanDefinitionReader;
|
||||||
import org.springframework.beans.factory.support.BeanDefinitionReader;
|
import org.springframework.beans.factory.support.BeanDefinitionReader;
|
||||||
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
|
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
|
||||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||||
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
||||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||||
import org.springframework.context.config.SpecificationContext;
|
|
||||||
import org.springframework.context.config.FeatureSpecification;
|
import org.springframework.context.config.FeatureSpecification;
|
||||||
|
import org.springframework.context.config.SpecificationContext;
|
||||||
import org.springframework.core.Conventions;
|
import org.springframework.core.Conventions;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
|
|
@ -91,6 +92,8 @@ class ConfigurationClassBeanDefinitionReader {
|
||||||
|
|
||||||
private final MetadataReaderFactory metadataReaderFactory;
|
private final MetadataReaderFactory metadataReaderFactory;
|
||||||
|
|
||||||
|
private ResourceLoader resourceLoader;
|
||||||
|
|
||||||
private SpecificationContext specificationContext;
|
private SpecificationContext specificationContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -107,11 +110,12 @@ class ConfigurationClassBeanDefinitionReader {
|
||||||
this.sourceExtractor = sourceExtractor;
|
this.sourceExtractor = sourceExtractor;
|
||||||
this.problemReporter = problemReporter;
|
this.problemReporter = problemReporter;
|
||||||
this.metadataReaderFactory = metadataReaderFactory;
|
this.metadataReaderFactory = metadataReaderFactory;
|
||||||
|
this.resourceLoader = resourceLoader;
|
||||||
// TODO SPR-7420: see about passing in the SpecificationContext created in ConfigurationClassPostProcessor
|
// TODO SPR-7420: see about passing in the SpecificationContext created in ConfigurationClassPostProcessor
|
||||||
this.specificationContext = new SpecificationContext();
|
this.specificationContext = new SpecificationContext();
|
||||||
this.specificationContext.setRegistry(this.registry);
|
this.specificationContext.setRegistry(this.registry);
|
||||||
this.specificationContext.setRegistrar(new SimpleComponentRegistrar(this.registry));
|
this.specificationContext.setRegistrar(new SimpleComponentRegistrar(this.registry));
|
||||||
this.specificationContext.setResourceLoader(resourceLoader);
|
this.specificationContext.setResourceLoader(this.resourceLoader);
|
||||||
this.specificationContext.setEnvironment(environment);
|
this.specificationContext.setEnvironment(environment);
|
||||||
this.specificationContext.setProblemReporter(problemReporter);
|
this.specificationContext.setProblemReporter(problemReporter);
|
||||||
}
|
}
|
||||||
|
|
@ -302,8 +306,15 @@ class ConfigurationClassBeanDefinitionReader {
|
||||||
Class<?> readerClass = entry.getValue();
|
Class<?> readerClass = entry.getValue();
|
||||||
if (!readerInstanceCache.containsKey(readerClass)) {
|
if (!readerInstanceCache.containsKey(readerClass)) {
|
||||||
try {
|
try {
|
||||||
|
// Instantiate the specified BeanDefinitionReader
|
||||||
BeanDefinitionReader readerInstance = (BeanDefinitionReader)
|
BeanDefinitionReader readerInstance = (BeanDefinitionReader)
|
||||||
readerClass.getConstructor(BeanDefinitionRegistry.class).newInstance(this.registry);
|
readerClass.getConstructor(BeanDefinitionRegistry.class).newInstance(this.registry);
|
||||||
|
|
||||||
|
// Delegate the current ResourceLoader to it if possible
|
||||||
|
if (readerInstance instanceof AbstractBeanDefinitionReader) {
|
||||||
|
((AbstractBeanDefinitionReader)readerInstance).setResourceLoader(this.resourceLoader);
|
||||||
|
}
|
||||||
|
|
||||||
readerInstanceCache.put(readerClass, readerInstance);
|
readerInstanceCache.put(readerClass, readerInstance);
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue