Reject method name mismatch in case of bean name overloading

Closes gh-33330
This commit is contained in:
Juergen Hoeller
2024-08-13 18:22:34 +02:00
parent 599fc8796b
commit 552936627a
2 changed files with 26 additions and 9 deletions

View File

@@ -41,6 +41,7 @@ import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.config.DependencyDescriptor;
import org.springframework.beans.factory.config.ListFactoryBean;
import org.springframework.beans.factory.parsing.BeanDefinitionParsingException;
import org.springframework.beans.factory.support.BeanDefinitionOverrideException;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.testfixture.beans.ITestBean;
@@ -219,6 +220,12 @@ class ConfigurationClassProcessingTests {
assertThat(foo.getSpouse()).isNull();
}
@Test // gh-33330
void configurationWithMethodNameMismatch() {
assertThatExceptionOfType(BeanDefinitionOverrideException.class)
.isThrownBy(() -> initBeanFactory(ConfigWithMethodNameMismatch.class));
}
@Test
void configurationWithAdaptivePrototypes() {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
@@ -352,6 +359,7 @@ class ConfigurationClassProcessingTests {
String configBeanName = configClass.getName();
factory.registerBeanDefinition(configBeanName, new RootBeanDefinition(configClass));
}
factory.setAllowBeanDefinitionOverriding(false);
ConfigurationClassPostProcessor ccpp = new ConfigurationClassPostProcessor();
ccpp.postProcessBeanDefinitionRegistry(factory);
ccpp.postProcessBeanFactory(factory);
@@ -526,6 +534,19 @@ class ConfigurationClassProcessingTests {
}
@Configuration
static class ConfigWithMethodNameMismatch {
@Bean(name = "foo") public TestBean foo() {
return new SpousyTestBean("foo");
}
@Bean(name = "foo") public TestBean fooX() {
return new SpousyTestBean("fooX");
}
}
@Scope("prototype")
static class AdaptiveInjectionPoints {