Register AutoConfigurations using fully qualified class name

Update `AbstractApplicationContextRunner` and `Configurations` to
allow registration of beans with a specific generated bean name. By
default, no name is generated, however, `AutoConfigurations` has been
updated to use bean names using the fully qualified class name.

The update brings `ApplicationContextRunners` closer the behavior of
a standard Spring Boot application where user `@Configuration` classes
are usually registered with a simple name and auto-configurations are
imported (via an `ImportSelector`) using a fully qualified name.

Fixes gh-17963

Co-authored-by: Stéphane Nicoll <stephane.nicoll@broadcom.com>
Co-authored-by: Andy Wilkinson <andy.wilkinson@broadcom.com>
Co-authored-by: Dmytro Nosan <dimanosan@gmail.com>
This commit is contained in:
Phillip Webb
2024-11-18 11:25:29 -08:00
parent a705402e75
commit 26c775eff8
8 changed files with 207 additions and 26 deletions

View File

@@ -51,7 +51,7 @@ public class AutoConfigurations extends Configurations implements Ordered {
}
AutoConfigurations(UnaryOperator<String> replacementMapper, Collection<Class<?>> classes) {
super(sorter(replacementMapper), classes);
super(sorter(replacementMapper), classes, Class::getName);
this.replacementMapper = replacementMapper;
}

View File

@@ -54,6 +54,12 @@ class AutoConfigurationsTests {
AutoConfigureA.class);
}
@Test
void getBeanNameShouldUseClassName() {
Configurations configurations = AutoConfigurations.of(AutoConfigureA.class, AutoConfigureB.class);
assertThat(configurations.getBeanName(AutoConfigureA.class)).isEqualTo(AutoConfigureA.class.getName());
}
private String replaceB(String className) {
return (!AutoConfigureB.class.getName().equals(className)) ? className : AutoConfigureB2.class.getName();
}