Merge branch '3.4.x' into 3.5.x

Closes gh-48123
This commit is contained in:
Andy Wilkinson
2025-11-13 13:57:08 +00:00
2 changed files with 20 additions and 2 deletions
@@ -461,11 +461,19 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat
}
private List<String> getPrimaryBeans(Map<String, BeanDefinition> beanDefinitions) {
return getMatchingBeans(beanDefinitions, BeanDefinition::isPrimary);
return getMatchingBeans(beanDefinitions, this::isPrimary);
}
private boolean isPrimary(BeanDefinition beanDefinition) {
return (beanDefinition != null) && beanDefinition.isPrimary();
}
private List<String> getNonFallbackBeans(Map<String, BeanDefinition> beanDefinitions) {
return getMatchingBeans(beanDefinitions, Predicate.not(BeanDefinition::isFallback));
return getMatchingBeans(beanDefinitions, this::isNotFallback);
}
private boolean isNotFallback(BeanDefinition beanDefinition) {
return (beanDefinition == null) || !beanDefinition.isFallback();
}
private List<String> getMatchingBeans(Map<String, BeanDefinition> beanDefinitions, Predicate<BeanDefinition> test) {
@@ -195,6 +195,16 @@ class ConditionalOnSingleCandidateTests {
});
}
@Test
void singleCandidateDoesNotMatchWhenMultipleRegisteredAsSingletonCandidates() {
this.contextRunner.withInitializer((context) -> {
context.getBeanFactory().registerSingleton("alpha", "alpha");
context.getBeanFactory().registerSingleton("bravo", "bravo");
})
.withUserConfiguration(OnBeanSingleCandidateConfiguration.class)
.run((context) -> assertThat(context).doesNotHaveBean("consumer"));
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnSingleCandidate(String.class)
static class OnBeanSingleCandidateConfiguration {