diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/BeanDefinitionLoader.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/BeanDefinitionLoader.java index 9e29d1912b..6719541f47 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/BeanDefinitionLoader.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/BeanDefinitionLoader.java @@ -26,12 +26,14 @@ import groovy.lang.Closure; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader; +import org.springframework.beans.factory.support.AbstractBeanDefinitionReader; import org.springframework.beans.factory.support.BeanDefinitionReader; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanNameGenerator; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.context.annotation.AnnotatedBeanDefinitionReader; import org.springframework.context.annotation.ClassPathBeanDefinitionScanner; +import org.springframework.core.SpringProperties; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; @@ -53,17 +55,21 @@ import org.springframework.util.StringUtils; * * @author Phillip Webb * @author Vladislav Kisel + * @author Sebastien Deleuze * @see #setBeanNameGenerator(BeanNameGenerator) */ class BeanDefinitionLoader { + // Static final field to facilitate code removal by Graal + private static final boolean XML_ENABLED = !SpringProperties.getFlag("spring.xml.ignore"); + private final Object[] sources; private final AnnotatedBeanDefinitionReader annotatedReader; - private final XmlBeanDefinitionReader xmlReader; + private final AbstractBeanDefinitionReader xmlReader; - private BeanDefinitionReader groovyReader; + private final BeanDefinitionReader groovyReader; private final ClassPathBeanDefinitionScanner scanner; @@ -80,10 +86,8 @@ class BeanDefinitionLoader { Assert.notEmpty(sources, "Sources must not be empty"); this.sources = sources; this.annotatedReader = new AnnotatedBeanDefinitionReader(registry); - this.xmlReader = new XmlBeanDefinitionReader(registry); - if (isGroovyPresent()) { - this.groovyReader = new GroovyBeanDefinitionReader(registry); - } + this.xmlReader = (XML_ENABLED ? new XmlBeanDefinitionReader(registry) : null); + this.groovyReader = (isGroovyPresent() ? new GroovyBeanDefinitionReader(registry) : null); this.scanner = new ClassPathBeanDefinitionScanner(registry); this.scanner.addExcludeFilter(new ClassExcludeFilter(sources)); } @@ -94,8 +98,10 @@ class BeanDefinitionLoader { */ void setBeanNameGenerator(BeanNameGenerator beanNameGenerator) { this.annotatedReader.setBeanNameGenerator(beanNameGenerator); - this.xmlReader.setBeanNameGenerator(beanNameGenerator); this.scanner.setBeanNameGenerator(beanNameGenerator); + if (this.xmlReader != null) { + this.xmlReader.setBeanNameGenerator(beanNameGenerator); + } } /** @@ -104,8 +110,10 @@ class BeanDefinitionLoader { */ void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; - this.xmlReader.setResourceLoader(resourceLoader); this.scanner.setResourceLoader(resourceLoader); + if (this.xmlReader != null) { + this.xmlReader.setResourceLoader(resourceLoader); + } } /** @@ -114,8 +122,10 @@ class BeanDefinitionLoader { */ void setEnvironment(ConfigurableEnvironment environment) { this.annotatedReader.setEnvironment(environment); - this.xmlReader.setEnvironment(environment); this.scanner.setEnvironment(environment); + if (this.xmlReader != null) { + this.xmlReader.setEnvironment(environment); + } } /** @@ -167,6 +177,9 @@ class BeanDefinitionLoader { this.groovyReader.loadBeanDefinitions(source); } else { + if (this.xmlReader == null) { + throw new BeanDefinitionStoreException("Cannot load XML bean definitions when XML support is disabled"); + } this.xmlReader.loadBeanDefinitions(source); } }