Fix @Import with multiple bean registrars

This commit uses a MultiValueMap instead of a Map to store bean
registrars, allowing to support multiple bean registrars imported by
the same configuration class.

Closes gh-35653
This commit is contained in:
Sébastien Deleuze
2025-10-20 17:36:43 +02:00
parent b65390828e
commit 5fd3c9c449
7 changed files with 133 additions and 30 deletions
@@ -23,6 +23,8 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.testfixture.beans.factory.BarRegistrar;
import org.springframework.context.testfixture.beans.factory.FooRegistrar;
import org.springframework.context.testfixture.beans.factory.GenericBeanRegistrar;
import org.springframework.context.testfixture.beans.factory.ImportAwareBeanRegistrar;
import org.springframework.context.testfixture.beans.factory.SampleBeanRegistrar.Bar;
@@ -32,6 +34,7 @@ import org.springframework.context.testfixture.beans.factory.SampleBeanRegistrar
import org.springframework.context.testfixture.context.annotation.registrar.BeanRegistrarConfiguration;
import org.springframework.context.testfixture.context.annotation.registrar.GenericBeanRegistrarConfiguration;
import org.springframework.context.testfixture.context.annotation.registrar.ImportAwareBeanRegistrarConfiguration;
import org.springframework.context.testfixture.context.annotation.registrar.MultipleBeanRegistrarsConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -93,4 +96,13 @@ public class BeanRegistrarConfigurationTests {
.isEqualTo(ImportAwareBeanRegistrarConfiguration.class.getName());
}
@Test
void multipleBeanRegistrars() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(MultipleBeanRegistrarsConfiguration.class);
context.refresh();
assertThat(context.getBean(FooRegistrar.Foo.class)).isNotNull();
assertThat(context.getBean(BarRegistrar.Bar.class)).isNotNull();
}
}