From 81a8b8fd191a2a9336dbf1d5ef79fd1e9cfbcce5 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 3 Jun 2009 13:16:01 +0000 Subject: [PATCH] strict matching of named arguments --- .../config/ConstructorArgumentValues.java | 36 +++++++------------ 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java b/org.springframework.beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java index f3df62f97b0..e0812e1fa8e 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java @@ -244,30 +244,20 @@ public class ConstructorArgumentValues { */ public ValueHolder getGenericArgumentValue(Class requiredType, String requiredName, Set 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; }