|
|
|
|
@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
|
|
|
|
|
/* |
|
|
|
|
* Copyright 2012-2020 the original author or authors. |
|
|
|
|
* Copyright 2012-2022 the original author or authors. |
|
|
|
|
* |
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
|
@ -130,13 +130,25 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat
@@ -130,13 +130,25 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat
|
|
|
|
|
if (!matchResult.isAllMatched()) { |
|
|
|
|
return ConditionOutcome.noMatch(spec.message().didNotFind("any beans").atAll()); |
|
|
|
|
} |
|
|
|
|
else if (!hasSingleAutowireCandidate(context.getBeanFactory(), matchResult.getNamesOfAllMatches(), |
|
|
|
|
spec.getStrategy() == SearchStrategy.ALL)) { |
|
|
|
|
return ConditionOutcome.noMatch(spec.message().didNotFind("a primary bean from beans") |
|
|
|
|
.items(Style.QUOTE, matchResult.getNamesOfAllMatches())); |
|
|
|
|
Set<String> allBeans = matchResult.getNamesOfAllMatches(); |
|
|
|
|
if (allBeans.size() == 1) { |
|
|
|
|
matchMessage = spec.message(matchMessage).found("a single bean").items(Style.QUOTE, allBeans); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
List<String> primaryBeans = getPrimaryBeans(context.getBeanFactory(), allBeans, |
|
|
|
|
spec.getStrategy() == SearchStrategy.ALL); |
|
|
|
|
if (primaryBeans.isEmpty()) { |
|
|
|
|
return ConditionOutcome.noMatch( |
|
|
|
|
spec.message().didNotFind("a primary bean from beans").items(Style.QUOTE, allBeans)); |
|
|
|
|
} |
|
|
|
|
if (primaryBeans.size() > 1) { |
|
|
|
|
return ConditionOutcome |
|
|
|
|
.noMatch(spec.message().found("multiple primary beans").items(Style.QUOTE, primaryBeans)); |
|
|
|
|
} |
|
|
|
|
matchMessage = spec.message(matchMessage) |
|
|
|
|
.found("a single primary bean '" + primaryBeans.get(0) + "' from beans") |
|
|
|
|
.items(Style.QUOTE, allBeans); |
|
|
|
|
} |
|
|
|
|
matchMessage = spec.message(matchMessage).found("a primary bean from beans").items(Style.QUOTE, |
|
|
|
|
matchResult.getNamesOfAllMatches()); |
|
|
|
|
} |
|
|
|
|
if (metadata.isAnnotated(ConditionalOnMissingBean.class.getName())) { |
|
|
|
|
Spec<ConditionalOnMissingBean> spec = new Spec<>(context, metadata, annotations, |
|
|
|
|
@ -341,11 +353,6 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat
@@ -341,11 +353,6 @@ class OnBeanCondition extends FilteringSpringBootCondition implements Configurat
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean hasSingleAutowireCandidate(ConfigurableListableBeanFactory beanFactory, Set<String> beanNames, |
|
|
|
|
boolean considerHierarchy) { |
|
|
|
|
return (beanNames.size() == 1 || getPrimaryBeans(beanFactory, beanNames, considerHierarchy).size() == 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private List<String> getPrimaryBeans(ConfigurableListableBeanFactory beanFactory, Set<String> beanNames, |
|
|
|
|
boolean considerHierarchy) { |
|
|
|
|
List<String> primaryBeans = new ArrayList<>(); |
|
|
|
|
|