autowire="byType" ignores parameter name when choosing a primary bean, as defined (SPR-6917)

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3075 50f2f4bb-b051-0410-bef5-90022cba6387
This commit is contained in:
Juergen Hoeller
2010-03-10 13:46:31 +00:00
parent f6a13bac72
commit 47871d47e2
2 changed files with 63 additions and 35 deletions
@@ -1130,7 +1130,7 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
MethodParameter methodParam = BeanUtils.getWriteMethodParameter(pd);
// Do not allow eager init for type matching in case of a prioritized post-processor.
boolean eager = !PriorityOrdered.class.isAssignableFrom(bw.getWrappedClass());
DependencyDescriptor desc = new DependencyDescriptor(methodParam, false, eager);
DependencyDescriptor desc = new AutowireByTypeDependencyDescriptor(methodParam, eager);
Object autowiredArgument = resolveDependency(desc, beanName, autowiredBeanNames, converter);
if (autowiredArgument != null) {
pvs.add(propertyName, autowiredArgument);
@@ -1553,4 +1553,21 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac
this.factoryBeanInstanceCache.remove(beanName);
}
/**
* Special DependencyDescriptor variant for autowire="byType".
* Always optional; never considering the parameter name for choosing a primary candidate.
*/
private static class AutowireByTypeDependencyDescriptor extends DependencyDescriptor {
public AutowireByTypeDependencyDescriptor(MethodParameter methodParameter, boolean eager) {
super(methodParameter, false, eager);
}
@Override
public String getDependencyName() {
return null;
}
}
}