Do not replace existing Bean Override definition with pseudo-definition
Prior to this commit, BeanOverrideBeanFactoryPostProcessor replaced existing bean definitions with "pseudo" bean definitions; however, that is unnecessary. An existing BeanDefinition is suitable as-is and does not need to be replaced with a pseudo/fake definition. To address that, this commit reregisters an existing bean definition and only registers a new bean definition when creating a bean definition for a nonexistent bean. As a side effect, we no longer need to copy primary and fallback flags. Closes gh-33627
This commit is contained in:
@@ -315,7 +315,6 @@ class BeanOverrideBeanFactoryPostProcessorTests {
|
||||
|
||||
assertThatNoException().isThrownBy(context::refresh);
|
||||
assertThat(context.getBeanDefinition("descriptionBean"))
|
||||
.isNotSameAs(definition)
|
||||
.matches(BeanDefinition::isPrimary, "isPrimary")
|
||||
.matches(BeanDefinition::isFallback, "isFallback")
|
||||
.satisfies(d -> assertThat(d.getScope()).isEqualTo(""))
|
||||
@@ -324,9 +323,8 @@ class BeanOverrideBeanFactoryPostProcessorTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void qualifiedElementIsSetToBeanOverrideField() {
|
||||
void qualifiedElementIsSetToBeanOverrideFieldForNonexistentBeanDefinition() {
|
||||
AnnotationConfigApplicationContext context = createContext(CaseByNameWithQualifier.class);
|
||||
context.registerBeanDefinition("descriptionBean", new RootBeanDefinition(String.class, () -> "ORIGINAL"));
|
||||
|
||||
assertThatNoException().isThrownBy(context::refresh);
|
||||
assertThat(context.getBeanDefinition("descriptionBean"))
|
||||
@@ -398,9 +396,12 @@ class BeanOverrideBeanFactoryPostProcessorTests {
|
||||
static class CaseByNameWithQualifier {
|
||||
|
||||
@Qualifier("preferThis")
|
||||
@DummyBean(beanName = "descriptionBean")
|
||||
@TestBean(name = "descriptionBean", enforceOverride = false)
|
||||
private String description;
|
||||
|
||||
static String descriptionBean() {
|
||||
return "overridden";
|
||||
}
|
||||
}
|
||||
|
||||
static class TestFactoryBean implements FactoryBean<Object> {
|
||||
|
||||
Reference in New Issue
Block a user