@@ -1137,7 +1137,7 @@ private Object resolveMultipleBeans(DependencyDescriptor descriptor, String bean
11371137 if (type .isArray ()) {
11381138 Class <?> componentType = type .getComponentType ();
11391139 Map <String , Object > matchingBeans = findAutowireCandidates (beanName , componentType ,
1140- new MultiElementDependencyDescriptor (descriptor ));
1140+ new MultiElementDescriptor (descriptor ));
11411141 if (matchingBeans .isEmpty ()) {
11421142 return null ;
11431143 }
@@ -1157,7 +1157,7 @@ else if (Collection.class.isAssignableFrom(type) && type.isInterface()) {
11571157 return null ;
11581158 }
11591159 Map <String , Object > matchingBeans = findAutowireCandidates (beanName , elementType ,
1160- new MultiElementDependencyDescriptor (descriptor ));
1160+ new MultiElementDescriptor (descriptor ));
11611161 if (matchingBeans .isEmpty ()) {
11621162 return null ;
11631163 }
@@ -1181,7 +1181,7 @@ else if (Map.class.isAssignableFrom(type) && type.isInterface()) {
11811181 return null ;
11821182 }
11831183 Map <String , Object > matchingBeans = findAutowireCandidates (beanName , valueType ,
1184- new MultiElementDependencyDescriptor (descriptor ));
1184+ new MultiElementDescriptor (descriptor ));
11851185 if (matchingBeans .isEmpty ()) {
11861186 return null ;
11871187 }
@@ -1248,25 +1248,27 @@ protected Map<String, Object> findAutowireCandidates(
12481248 }
12491249 }
12501250 }
1251- for (String candidateName : candidateNames ) {
1252- if (!isSelfReference (beanName , candidateName ) && isAutowireCandidate (candidateName , descriptor )) {
1253- addCandidateEntry (result , candidateName , descriptor , requiredType );
1251+ for (String candidate : candidateNames ) {
1252+ if (!isSelfReference (beanName , candidate ) && isAutowireCandidate (candidate , descriptor )) {
1253+ addCandidateEntry (result , candidate , descriptor , requiredType );
12541254 }
12551255 }
12561256 if (result .isEmpty () && !indicatesMultipleBeans (requiredType )) {
12571257 // Consider fallback matches if the first pass failed to find anything...
12581258 DependencyDescriptor fallbackDescriptor = descriptor .forFallbackMatch ();
1259- for (String candidateName : candidateNames ) {
1260- if (!isSelfReference (beanName , candidateName ) && isAutowireCandidate (candidateName , fallbackDescriptor )) {
1261- addCandidateEntry (result , candidateName , descriptor , requiredType );
1259+ for (String candidate : candidateNames ) {
1260+ if (!isSelfReference (beanName , candidate ) && isAutowireCandidate (candidate , fallbackDescriptor )) {
1261+ addCandidateEntry (result , candidate , descriptor , requiredType );
12621262 }
12631263 }
1264- if (result .isEmpty () && !( descriptor instanceof MultiElementDependencyDescriptor ) ) {
1264+ if (result .isEmpty ()) {
12651265 // Consider self references as a final pass...
1266- // but not as collection elements, just for direct dependency declarations.
1267- for (String candidateName : candidateNames ) {
1268- if (isSelfReference (beanName , candidateName ) && isAutowireCandidate (candidateName , fallbackDescriptor )) {
1269- addCandidateEntry (result , candidateName , descriptor , requiredType );
1266+ // but in the case of a dependency collection, not the very same bean itself.
1267+ for (String candidate : candidateNames ) {
1268+ if (isSelfReference (beanName , candidate ) &&
1269+ (!(descriptor instanceof MultiElementDescriptor ) || !beanName .equals (candidate )) &&
1270+ isAutowireCandidate (candidate , fallbackDescriptor )) {
1271+ addCandidateEntry (result , candidate , descriptor , requiredType );
12701272 }
12711273 }
12721274 }
@@ -1281,7 +1283,7 @@ protected Map<String, Object> findAutowireCandidates(
12811283 private void addCandidateEntry (Map <String , Object > candidates , String candidateName ,
12821284 DependencyDescriptor descriptor , Class <?> requiredType ) {
12831285
1284- if (descriptor instanceof MultiElementDependencyDescriptor || containsSingleton (candidateName )) {
1286+ if (descriptor instanceof MultiElementDescriptor || containsSingleton (candidateName )) {
12851287 candidates .put (candidateName , descriptor .resolveCandidate (candidateName , requiredType , this ));
12861288 }
12871289 else {
@@ -1730,9 +1732,9 @@ public NestedDependencyDescriptor(DependencyDescriptor original) {
17301732 }
17311733
17321734
1733- private static class MultiElementDependencyDescriptor extends NestedDependencyDescriptor {
1735+ private static class MultiElementDescriptor extends NestedDependencyDescriptor {
17341736
1735- public MultiElementDependencyDescriptor (DependencyDescriptor original ) {
1737+ public MultiElementDescriptor (DependencyDescriptor original ) {
17361738 super (original );
17371739 }
17381740 }
0 commit comments