diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java index 61f6a7b54fc..85c895c552a 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2014 the original author or authors. + * Copyright 2012-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,6 @@ import org.junit.After; import org.junit.Test; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration; -import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchAutoConfiguration; import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchDataAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.test.ApplicationContextTestUtils; @@ -53,17 +52,18 @@ public class SpringApplicationHierarchyTests { "--server.port=0"); } - @EnableAutoConfiguration(exclude = { ElasticsearchAutoConfiguration.class, + @EnableAutoConfiguration(exclude = { ElasticsearchDataAutoConfiguration.class, - ElasticsearchRepositoriesAutoConfiguration.class }) + ElasticsearchRepositoriesAutoConfiguration.class}, + excludeName = {"org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchAutoConfiguration"}) public static class Child { } - @EnableAutoConfiguration(exclude = { JolokiaAutoConfiguration.class, + @EnableAutoConfiguration(exclude = {JolokiaAutoConfiguration.class, EndpointMBeanExportAutoConfiguration.class, - ElasticsearchAutoConfiguration.class, ElasticsearchDataAutoConfiguration.class, - ElasticsearchRepositoriesAutoConfiguration.class }) + ElasticsearchRepositoriesAutoConfiguration.class}, + excludeName = {"org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchAutoConfiguration"}) public static class Parent { } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfiguration.java index b042821a1bc..e1a5b07a6fb 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfiguration.java @@ -43,8 +43,9 @@ import org.springframework.core.io.support.SpringFactoriesLoader; *
* Auto-configuration tries to be as intelligent as possible and will back-away as you * define more of your own configuration. You can always manually {@link #exclude()} any - * configuration that you never want to apply. Auto-configuration is always applied after - * user-defined beans have been registered. + * configuration that you never want to apply (use {@link #excludeName()} if you don't + * have access to them). Auto-configuration is always applied after user-defined beans + * have been registered. *
* The package of the class that is annotated with {@code @EnableAutoConfiguration} has
* specific significance and is often used as a 'default'. For example, it will be used
@@ -59,6 +60,7 @@ import org.springframework.core.io.support.SpringFactoriesLoader;
* {@link ConditionalOnMissingBean @ConditionalOnMissingBean} annotations).
*
* @author Phillip Webb
+ * @author Stephane Nicoll
* @see ConditionalOnBean
* @see ConditionalOnMissingBean
* @see ConditionalOnClass
@@ -78,4 +80,11 @@ public @interface EnableAutoConfiguration {
*/
Class>[] exclude() default {};
+ /**
+ * Exclude specific auto-configuration class names such that they will never be
+ * applied.
+ * @return the class names to exclude
+ */
+ String[] excludeName() default {};
+
}
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 7388d0cdc18..633faa27b44 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
@@ -44,6 +44,7 @@ import org.springframework.util.Assert;
*
* @author Phillip Webb
* @author Andy Wilkinson
+ * @author Stephane Nicoll
* @see EnableAutoConfiguration
*/
@Order(Ordered.LOWEST_PRECEDENCE)
@@ -73,9 +74,8 @@ class EnableAutoConfigurationImportSelector implements DeferredImportSelector,
this.beanClassLoader)));
// Remove those specifically disabled
- List