Browse Source

strict matching of named arguments

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@1307 50f2f4bb-b051-0410-bef5-90022cba6387
pull/1/head
Juergen Hoeller 17 years ago
parent
commit
a233fe2c9f
  1. 36
      org.springframework.beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java

36
org.springframework.beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java

@ -244,30 +244,20 @@ public class ConstructorArgumentValues { @@ -244,30 +244,20 @@ public class ConstructorArgumentValues {
*/
public ValueHolder getGenericArgumentValue(Class requiredType, String requiredName, Set<ValueHolder> usedValueHolders) {
for (ValueHolder valueHolder : this.genericArgumentValues) {
if (usedValueHolders == null || !usedValueHolders.contains(valueHolder)) {
if (requiredType != null) {
// Check matching type.
if (valueHolder.getName() != null) {
if (valueHolder.getName().equals(requiredName)) {
return valueHolder;
}
}
else if (valueHolder.getType() != null) {
if (valueHolder.getType().equals(requiredType.getName())) {
return valueHolder;
}
}
else if (ClassUtils.isAssignableValue(requiredType, valueHolder.getValue())) {
return valueHolder;
}
}
else {
// No required type specified -> consider untyped values only.
if (valueHolder.getType() == null) {
return valueHolder;
}
}
if (usedValueHolders != null && usedValueHolders.contains(valueHolder)) {
continue;
}
if (valueHolder.getName() != null && (requiredName == null || !valueHolder.getName().equals(requiredName))) {
continue;
}
if (valueHolder.getType() != null && (requiredType == null || !valueHolder.getType().equals(requiredType.getName()))) {
continue;
}
if (requiredType != null && valueHolder.getType() == null && valueHolder.getName() == null &&
!ClassUtils.isAssignableValue(requiredType, valueHolder.getValue())) {
continue;
}
return valueHolder;
}
return null;
}

Loading…
Cancel
Save