Respect @Configuration(value) for @Imported classes
Prior to this commit, @Configuration classes included via @Import (or
via automatic registration of nested configuration classes) would
always be registered with a generated bean name, regardless of whether
the user had specified a 'value' indicating a customized bean name, e.g.
@Configuration("myConfig")
public class AppConfig { ... }
Now this bean name is propagated as intended in all cases, meaning that
in the example above, the resulting bean definition of type AppConfig
will be named "myConfig" regardless how it was registered with the
container -- directly against the application context, via component
scanning, via @Import, or via automatic registration of nested
configuration classes.
Issue: SPR-9023
This commit is contained in:
@@ -42,7 +42,7 @@ public abstract class AbstractCircularImportDetectionTests {
|
||||
public void simpleCircularImportIsDetected() throws Exception {
|
||||
boolean threw = false;
|
||||
try {
|
||||
newParser().parse(loadAsConfigurationSource(A.class), null);
|
||||
newParser().parse(loadAsConfigurationSource(A.class), "A");
|
||||
} catch (BeanDefinitionParsingException ex) {
|
||||
assertTrue("Wrong message. Got: " + ex.getMessage(),
|
||||
ex.getMessage().contains(
|
||||
@@ -59,7 +59,7 @@ public abstract class AbstractCircularImportDetectionTests {
|
||||
public void complexCircularImportIsDetected() throws Exception {
|
||||
boolean threw = false;
|
||||
try {
|
||||
newParser().parse(loadAsConfigurationSource(X.class), null);
|
||||
newParser().parse(loadAsConfigurationSource(X.class), "X");
|
||||
}
|
||||
catch (BeanDefinitionParsingException ex) {
|
||||
assertTrue("Wrong message. Got: " + ex.getMessage(),
|
||||
|
||||
@@ -25,6 +25,7 @@ import test.beans.TestBean;
|
||||
import org.springframework.beans.factory.parsing.BeanDefinitionParsingException;
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
|
||||
@@ -53,13 +54,6 @@ public class ImportTests {
|
||||
assertThat(beanFactory.getBeanDefinitionCount(), equalTo(expectedCount));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProcessImports() {
|
||||
int configClasses = 2;
|
||||
int beansInClasses = 2;
|
||||
assertBeanDefinitionCount((configClasses + beansInClasses), ConfigurationWithImportAnnotation.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProcessImportsWithAsm() {
|
||||
int configClasses = 2;
|
||||
@@ -315,4 +309,36 @@ public class ImportTests {
|
||||
static class ConfigAnnotated { }
|
||||
|
||||
static class NonConfigAnnotated { }
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Test that values supplied to @Configuration(value="...") are propagated as the
|
||||
* bean name for the configuration class even in the case of inclusion via @Import
|
||||
* or in the case of automatic registration via nesting
|
||||
*/
|
||||
@Test
|
||||
public void reproSpr9023() {
|
||||
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
|
||||
ctx.register(B.class);
|
||||
ctx.refresh();
|
||||
System.out.println(ctx.getBeanFactory());
|
||||
assertThat(ctx.getBeanNamesForType(B.class)[0], is("config-b"));
|
||||
assertThat(ctx.getBeanNamesForType(A.class)[0], is("config-a"));
|
||||
}
|
||||
|
||||
@Configuration("config-a")
|
||||
static class A { }
|
||||
|
||||
@Configuration("config-b")
|
||||
@Import(A.class)
|
||||
static class B { }
|
||||
|
||||
@Test
|
||||
public void testProcessImports() {
|
||||
int configClasses = 2;
|
||||
int beansInClasses = 2;
|
||||
assertBeanDefinitionCount((configClasses + beansInClasses), ConfigurationWithImportAnnotation.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user