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:
Sam Brannen
2024-10-01 12:20:15 +02:00
parent 56a0a33e5d
commit a21c557101
2 changed files with 14 additions and 20 deletions

View File

@@ -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> {