diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java index 69c2b252a309..5598dcebe537 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java @@ -615,7 +615,7 @@ else if (candidate.isAssignable(BeanRegistrar.class)) { if (registrar instanceof ImportAware importAware) { importAware.setImportMetadata(metadata); } - configClass.addBeanRegistrar(metadata.getClassName(), registrar); + configClass.addBeanRegistrar(candidateClass.getName(), registrar); } else if (candidate.isAssignable(ImportBeanDefinitionRegistrar.class)) { // Candidate class is an ImportBeanDefinitionRegistrar -> diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorAotContributionTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorAotContributionTests.java index 2c1fe46a9d42..16d81e71d876 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorAotContributionTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/ConfigurationClassPostProcessorAotContributionTests.java @@ -511,7 +511,7 @@ void applyToWhenIsImportAware() { initializer.accept(freshContext); freshContext.refresh(); assertThat(freshContext.getBean(ClassNameHolder.class).className()) - .isEqualTo(ImportAwareBeanRegistrarConfiguration.class.getName()); + .isEqualTo(ImportAwareBeanRegistrar.class.getName()); freshContext.close(); }); } diff --git a/spring-context/src/test/kotlin/org/springframework/context/annotation/BeanRegistrarDslConfigurationTests.kt b/spring-context/src/test/kotlin/org/springframework/context/annotation/BeanRegistrarDslConfigurationTests.kt index 07b5ff71ba96..e90f13ef3189 100644 --- a/spring-context/src/test/kotlin/org/springframework/context/annotation/BeanRegistrarDslConfigurationTests.kt +++ b/spring-context/src/test/kotlin/org/springframework/context/annotation/BeanRegistrarDslConfigurationTests.kt @@ -24,6 +24,7 @@ import org.springframework.beans.factory.InitializingBean import org.springframework.beans.factory.NoSuchBeanDefinitionException import org.springframework.beans.factory.config.BeanDefinition import org.springframework.beans.factory.getBean +import org.springframework.beans.factory.getBeanProvider import org.springframework.beans.factory.support.RootBeanDefinition import org.springframework.mock.env.MockEnvironment import java.util.function.Supplier @@ -77,6 +78,13 @@ class BeanRegistrarDslConfigurationTests { assertThat(context.getBean().foo).isEqualTo(context.getBean()) } + @Test + fun multipleBeanRegistrar() { + val context = AnnotationConfigApplicationContext(MultipleBeanRegistrarKotlinConfiguration::class.java) + assertThat(context.getBeanProvider().singleOrNull()).isNotNull + assertThat(context.getBeanProvider().singleOrNull()).isNotNull + } + class Foo data class Bar(val foo: Foo) data class Baz(val message: String = "") @@ -90,6 +98,18 @@ class BeanRegistrarDslConfigurationTests { } + @Configuration + @Import(value = [FooRegistrar::class, BarRegistrar::class]) + internal class MultipleBeanRegistrarKotlinConfiguration + + private class FooRegistrar : BeanRegistrarDsl({ + registerBean() + }) + + private class BarRegistrar : BeanRegistrarDsl({ + registerBean() + }) + @Configuration @Import(SampleBeanRegistrar::class) internal class BeanRegistrarKotlinConfiguration