Skip to content

Commit bc01e31

Browse files
committed
Ignore fallback bean for shortcut resolution
See gh-26241 See gh-28122
1 parent 480051a commit bc01e31

File tree

1 file changed

+6
-10
lines changed

1 file changed

+6
-10
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java

+6-10
Original file line numberDiff line numberDiff line change
@@ -1408,7 +1408,8 @@ public Object doResolveDependency(DependencyDescriptor descriptor, @Nullable Str
14081408
}
14091409
if (dependencyName != null &&
14101410
isTypeMatch(dependencyName, type) && isAutowireCandidate(dependencyName, descriptor) &&
1411-
!hasPrimaryConflict(dependencyName, type) && !isSelfReference(beanName, dependencyName)) {
1411+
!isFallback(dependencyName) && !hasPrimaryConflict(dependencyName, type) &&
1412+
!isSelfReference(beanName, dependencyName)) {
14121413
if (autowiredBeanNames != null) {
14131414
autowiredBeanNames.add(dependencyName);
14141415
}
@@ -1819,10 +1820,8 @@ else if (candidateLocal) {
18191820
}
18201821
// Second pass: identify unique non-fallback candidate
18211822
if (primaryBeanName == null) {
1822-
for (Map.Entry<String, Object> entry : candidates.entrySet()) {
1823-
String candidateBeanName = entry.getKey();
1824-
Object beanInstance = entry.getValue();
1825-
if (!isFallback(candidateBeanName, beanInstance)) {
1823+
for (String candidateBeanName : candidates.keySet()) {
1824+
if (!isFallback(candidateBeanName)) {
18261825
if (primaryBeanName != null) {
18271826
return null;
18281827
}
@@ -1896,17 +1895,15 @@ protected boolean isPrimary(String beanName, Object beanInstance) {
18961895
* Return whether the bean definition for the given bean name has been
18971896
* marked as a fallback bean.
18981897
* @param beanName the name of the bean
1899-
* @param beanInstance the corresponding bean instance (can be {@code null})
1900-
* @return whether the given bean qualifies as fallback
19011898
* @since 6.2
19021899
*/
1903-
protected boolean isFallback(String beanName, Object beanInstance) {
1900+
private boolean isFallback(String beanName) {
19041901
String transformedBeanName = transformedBeanName(beanName);
19051902
if (containsBeanDefinition(transformedBeanName)) {
19061903
return getMergedLocalBeanDefinition(transformedBeanName).isFallback();
19071904
}
19081905
return (getParentBeanFactory() instanceof DefaultListableBeanFactory parent &&
1909-
parent.isFallback(transformedBeanName, beanInstance));
1906+
parent.isFallback(transformedBeanName));
19101907
}
19111908

19121909
/**
@@ -1954,7 +1951,6 @@ private boolean isSelfReference(@Nullable String beanName, @Nullable String cand
19541951
* Determine whether there is a primary bean registered for the given dependency type,
19551952
* not matching the given bean name.
19561953
*/
1957-
@Nullable
19581954
private boolean hasPrimaryConflict(String beanName, Class<?> dependencyType) {
19591955
for (String candidate : this.primaryBeanNames) {
19601956
if (isTypeMatch(candidate, dependencyType) && !candidate.equals(beanName)) {

0 commit comments

Comments
 (0)