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 70d8f6e9ab8..f71eb5d178f 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 @@ -131,6 +131,14 @@ public class ConstructorArgumentValues { this.indexedArgumentValues.put(key, newValue); } + /** + * Check whether an argument value has been registered for the given index. + * @param index the index in the constructor argument list + */ + public boolean hasIndexedArgumentValue(int index) { + return this.indexedArgumentValues.containsKey(index); + } + /** * Get argument value for the given index in the constructor argument list. * @param index the index in the constructor argument list diff --git a/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java b/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java index c28f0b18a28..827ce97566a 100644 --- a/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java +++ b/org.springframework.beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java @@ -778,7 +778,12 @@ public class BeanDefinitionParserDelegate { valueHolder.setName(nameAttr); } valueHolder.setSource(extractSource(ele)); - bd.getConstructorArgumentValues().addIndexedArgumentValue(index, valueHolder); + if (bd.getConstructorArgumentValues().hasIndexedArgumentValue(index)) { + error("Ambiguous constructor-arg entries for index " + index, ele); + } + else { + bd.getConstructorArgumentValues().addIndexedArgumentValue(index, valueHolder); + } } finally { this.parseState.pop();