Skip to content

Regression in duplicate beans with different method names #33920

Closed
@iparadiso

Description

@iparadiso

Observed Issue

In Spring Boot 3.3, duplicate named beans can be defined where @Primary can be used as the default. In Spring Boot 3.4 RC1, this behavior is no longer the same.

Consider the following example of two named beans with different behavior.

@TestConfiguration
public class TestConfig {

    @Bean(name = "foo")
    @Primary
    @ConditionalOnProperty(name = "foo.truthy", havingValue = "true", matchIfMissing = true)
    Boolean fooIsTrue() {
        return true;
    }

    @Bean(name = "foo", defaultCandidate = false)
    Boolean fooIsFalse() {
        return false;
    }
}

When validated in the following test, SB 3.3 expectedly injects the "truthful" bean version marked as @Primary.

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = { TestConfig.class })
public class ConditionalTest {
    @Autowired
    @Qualifier("foo")
    Boolean foo;

    @Test
    void checkFoo() {
        assertTrue(foo);
    }
}

When this same test is applied in Spring Boot 3.4 RC1, the @Primary "foo" bean is no longer created, causing this test evaluation to fail.

Is this an exepected change in behavior?

Reproducer

This test is available here

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)type: regressionA bug that is also a regression

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions