Skip to content

Commit a6f671b

Browse files
committed
Add excludeName to EnableAutoConfiguration
Allow user to exclude an auto-configuration class by specifying the fully qualified name instead of the class reference. Closes gh-2660
1 parent fc61f2e commit a6f671b

File tree

4 files changed

+34
-12
lines changed

4 files changed

+34
-12
lines changed

spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/SpringApplicationHierarchyTests.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2014 the original author or authors.
2+
* Copyright 2012-2015 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -20,7 +20,6 @@
2020
import org.junit.Test;
2121
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
2222
import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration;
23-
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchAutoConfiguration;
2423
import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchDataAutoConfiguration;
2524
import org.springframework.boot.builder.SpringApplicationBuilder;
2625
import org.springframework.boot.test.ApplicationContextTestUtils;
@@ -53,17 +52,18 @@ public void testChild() {
5352
"--server.port=0");
5453
}
5554

56-
@EnableAutoConfiguration(exclude = { ElasticsearchAutoConfiguration.class,
55+
@EnableAutoConfiguration(exclude = {
5756
ElasticsearchDataAutoConfiguration.class,
58-
ElasticsearchRepositoriesAutoConfiguration.class })
57+
ElasticsearchRepositoriesAutoConfiguration.class},
58+
excludeName = {"org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchAutoConfiguration"})
5959
public static class Child {
6060
}
6161

62-
@EnableAutoConfiguration(exclude = { JolokiaAutoConfiguration.class,
62+
@EnableAutoConfiguration(exclude = {JolokiaAutoConfiguration.class,
6363
EndpointMBeanExportAutoConfiguration.class,
64-
ElasticsearchAutoConfiguration.class,
6564
ElasticsearchDataAutoConfiguration.class,
66-
ElasticsearchRepositoriesAutoConfiguration.class })
65+
ElasticsearchRepositoriesAutoConfiguration.class},
66+
excludeName = {"org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchAutoConfiguration"})
6767
public static class Parent {
6868
}
6969

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfiguration.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,9 @@
4343
* <p>
4444
* Auto-configuration tries to be as intelligent as possible and will back-away as you
4545
* define more of your own configuration. You can always manually {@link #exclude()} any
46-
* configuration that you never want to apply. Auto-configuration is always applied after
47-
* user-defined beans have been registered.
46+
* configuration that you never want to apply (use {@link #excludeName()} if you don't
47+
* have access to them). Auto-configuration is always applied after user-defined beans
48+
* have been registered.
4849
* <p>
4950
* The package of the class that is annotated with {@code @EnableAutoConfiguration} has
5051
* specific significance and is often used as a 'default'. For example, it will be used
@@ -59,6 +60,7 @@
5960
* {@link ConditionalOnMissingBean @ConditionalOnMissingBean} annotations).
6061
*
6162
* @author Phillip Webb
63+
* @author Stephane Nicoll
6264
* @see ConditionalOnBean
6365
* @see ConditionalOnMissingBean
6466
* @see ConditionalOnClass
@@ -78,4 +80,11 @@
7880
*/
7981
Class<?>[] exclude() default {};
8082

83+
/**
84+
* Exclude specific auto-configuration class names such that they will never be
85+
* applied.
86+
* @return the class names to exclude
87+
*/
88+
String[] excludeName() default {};
89+
8190
}

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/EnableAutoConfigurationImportSelector.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
*
4545
* @author Phillip Webb
4646
* @author Andy Wilkinson
47+
* @author Stephane Nicoll
4748
* @see EnableAutoConfiguration
4849
*/
4950
@Order(Ordered.LOWEST_PRECEDENCE)
@@ -73,9 +74,8 @@ public String[] selectImports(AnnotationMetadata metadata) {
7374
this.beanClassLoader)));
7475

7576
// Remove those specifically disabled
76-
List<String> excluded = Arrays.asList(attributes.getStringArray("exclude"));
77-
factories.removeAll(excluded);
78-
ConditionEvaluationReport.get(this.beanFactory).recordExclusions(excluded);
77+
exclude(Arrays.asList(attributes.getStringArray("exclude")), factories);
78+
exclude(Arrays.asList(attributes.getStringArray("excludeName")), factories);
7979

8080
// Sort
8181
factories = new AutoConfigurationSorter(this.resourceLoader)
@@ -88,6 +88,11 @@ public String[] selectImports(AnnotationMetadata metadata) {
8888
}
8989
}
9090

91+
private void exclude(List<String> excluded, List<String> factories) {
92+
factories.removeAll(excluded);
93+
ConditionEvaluationReport.get(this.beanFactory).recordExclusions(excluded);
94+
}
95+
9196
@Override
9297
public void setBeanClassLoader(ClassLoader classLoader) {
9398
this.beanClassLoader = classLoader;

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/SpringBootApplication.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
* {@code @EnableAutoConfiguration} and {@code @ComponentScan}.
3636
*
3737
* @author Phillip Webb
38+
* @author Stephane Nicoll
3839
* @since 1.2.0
3940
*/
4041
@Target(ElementType.TYPE)
@@ -52,4 +53,11 @@
5253
*/
5354
Class<?>[] exclude() default {};
5455

56+
/**
57+
* Exclude specific auto-configuration class names such that they will never be
58+
* applied.
59+
* @return the class names to exclude
60+
*/
61+
String[] excludeName() default {};
62+
5563
}

0 commit comments

Comments
 (0)