diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfigurationImportSelector.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfigurationImportSelector.java index 858cc27d89..109adbd36f 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfigurationImportSelector.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfigurationImportSelector.java @@ -30,6 +30,8 @@ import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.boot.autoconfigure.condition.ConditionEvaluationReport; +import org.springframework.boot.bind.PropertySourcesPropertyValues; +import org.springframework.boot.bind.RelaxedDataBinder; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.context.EnvironmentAware; import org.springframework.context.ResourceLoaderAware; @@ -37,6 +39,7 @@ import org.springframework.context.annotation.DeferredImportSelector; import org.springframework.core.Ordered; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.annotation.Order; +import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; import org.springframework.core.io.ResourceLoader; import org.springframework.core.io.support.SpringFactoriesLoader; @@ -151,14 +154,18 @@ public class EnableAutoConfigurationImportSelector implements DeferredImportSele } private List getExcludeAutoConfigurationsProperty() { + if (getEnvironment() instanceof ConfigurableEnvironment) { + Excludes excludes = new Excludes(); + RelaxedDataBinder binder = new RelaxedDataBinder(excludes, + "spring.autoconfigure."); + binder.bind(new PropertySourcesPropertyValues( + ((ConfigurableEnvironment) getEnvironment()).getPropertySources())); + return excludes.getExclude(); + } RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(getEnvironment(), "spring.autoconfigure."); - Collection raw = resolver.getProperties("exclude"); - List values = new ArrayList(); - for (Object r : raw) { - values.add(r.toString()); - } - return values; + String[] exclude = resolver.getProperty("exclude", String[].class); + return (Arrays.asList(exclude == null ? new String[0] : exclude)); } private List sort(List configurations) throws IOException { @@ -221,4 +228,21 @@ public class EnableAutoConfigurationImportSelector implements DeferredImportSele return this.resourceLoader; } + /** + * Bindable object used to get excludes. + */ + static class Excludes { + + private List exclude = new ArrayList(); + + public List getExclude() { + return this.exclude; + } + + public void setExclude(List excludes) { + this.exclude = excludes; + } + + } + } diff --git a/spring-boot/src/main/java/org/springframework/boot/bind/RelaxedPropertyResolver.java b/spring-boot/src/main/java/org/springframework/boot/bind/RelaxedPropertyResolver.java index f868284b4c..f738cc6c23 100644 --- a/spring-boot/src/main/java/org/springframework/boot/bind/RelaxedPropertyResolver.java +++ b/spring-boot/src/main/java/org/springframework/boot/bind/RelaxedPropertyResolver.java @@ -16,9 +16,6 @@ package org.springframework.boot.bind; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; import java.util.Map; import org.springframework.core.env.ConfigurableEnvironment; @@ -131,21 +128,6 @@ public class RelaxedPropertyResolver implements PropertyResolver { "Unable to resolve placeholders with relaxed properties"); } - /** - * Return the property values associated with the given key, or an empty - * list if the key cannot be resolved. - * @param key the property name to resolve - * @return the property values for that key - */ - public List getProperties(String key) { - Object[] singular = getProperty(key, Object[].class); - if (singular != null) { - return Arrays.asList(singular); - } - Map subProperties = getSubProperties(key); - return new ArrayList(subProperties.values()); - } - /** * Return a Map of all values from all underlying properties that start with the * specified key. NOTE: this method can only be used if the underlying resolver is a diff --git a/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedPropertyResolverTests.java b/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedPropertyResolverTests.java index 009e630737..538d66d293 100644 --- a/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedPropertyResolverTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/bind/RelaxedPropertyResolverTests.java @@ -17,7 +17,6 @@ package org.springframework.boot.bind; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import java.util.Properties; @@ -31,7 +30,6 @@ import org.springframework.core.env.MutablePropertySources; import org.springframework.core.env.PropertiesPropertySource; import org.springframework.core.env.StandardEnvironment; -import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertEquals; @@ -169,34 +167,6 @@ public class RelaxedPropertyResolverTests { assertThat(this.resolver.getProperty("foo-bar"), equalTo("spam")); } - @Test - public void commaSeparatedProperties() throws Exception { - this.source.put("x.y.foo", "1,2"); - this.resolver = new RelaxedPropertyResolver(this.environment, "x.y."); - List properties = this.resolver.getProperties("foo"); - assertThat(properties.size(), equalTo(2)); - assertThat(properties, contains((Object) "1", (Object) "2")); - } - - @Test - public void commaSeparatedPropertiesSingleValue() throws Exception { - this.source.put("x.y.foo", "1"); - this.resolver = new RelaxedPropertyResolver(this.environment, "x.y."); - List properties = this.resolver.getProperties("foo"); - assertThat(properties.size(), equalTo(1)); - assertThat(properties, contains((Object) "1")); - } - - @Test - public void indexedProperties() throws Exception { - this.source.put("x.y.foo[0]", "1"); - this.source.put("x.y.foo[1]", "2"); - this.resolver = new RelaxedPropertyResolver(this.environment, "x.y."); - List properties = this.resolver.getProperties("foo"); - assertThat(properties.size(), equalTo(2)); - assertThat(properties, contains((Object) "1", (Object) "2")); - } - @Test public void subProperties() throws Exception { this.source.put("x.y.my-sub.a.b", "1");