-
Notifications
You must be signed in to change notification settings - Fork 38.6k
Closed
Labels
in: coreIssues in core modules (aop, beans, core, context, expression)Issues in core modules (aop, beans, core, context, expression)type: regressionA bug that is also a regressionA bug that is also a regression
Milestone
Description
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)Issues in core modules (aop, beans, core, context, expression)type: regressionA bug that is also a regressionA bug that is also a regression