Consistently override (and prevent overriding for) aliases with bean definitions

Closes gh-27866
This commit is contained in:
Juergen Hoeller
2022-02-04 21:12:42 +01:00
parent e5af4aa608
commit 6b1c2dc944
3 changed files with 30 additions and 2 deletions

View File

@@ -854,8 +854,11 @@ class DefaultListableBeanFactoryTests {
lbf.registerBeanDefinition("test", new RootBeanDefinition(NestedTestBean.class));
lbf.registerAlias("otherTest", "test2");
lbf.registerAlias("test", "test2");
lbf.registerAlias("test", "testX");
lbf.registerBeanDefinition("testX", new RootBeanDefinition(TestBean.class));
assertThat(lbf.getBean("test")).isInstanceOf(NestedTestBean.class);
assertThat(lbf.getBean("test2")).isInstanceOf(NestedTestBean.class);
assertThat(lbf.getBean("testX")).isInstanceOf(TestBean.class);
}
@Test
@@ -864,6 +867,7 @@ class DefaultListableBeanFactoryTests {
BeanDefinition oldDef = new RootBeanDefinition(TestBean.class);
BeanDefinition newDef = new RootBeanDefinition(NestedTestBean.class);
lbf.registerBeanDefinition("test", oldDef);
lbf.registerAlias("test", "testX");
assertThatExceptionOfType(BeanDefinitionOverrideException.class).isThrownBy(() ->
lbf.registerBeanDefinition("test", newDef))
.satisfies(ex -> {
@@ -871,6 +875,13 @@ class DefaultListableBeanFactoryTests {
assertThat(ex.getBeanDefinition()).isEqualTo(newDef);
assertThat(ex.getExistingDefinition()).isEqualTo(oldDef);
});
assertThatExceptionOfType(BeanDefinitionOverrideException.class).isThrownBy(() ->
lbf.registerBeanDefinition("testX", newDef))
.satisfies(ex -> {
assertThat(ex.getBeanName()).isEqualTo("testX");
assertThat(ex.getBeanDefinition()).isEqualTo(newDef);
assertThat(ex.getExistingDefinition()).isEqualTo(oldDef);
});
}
@Test