autowire="byType" ignores parameter name when choosing a primary bean, as defined (SPR-6917)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user