diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java b/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java index 21330cf2a3..2627731225 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java @@ -963,10 +963,7 @@ public class AnnotatedElementUtils { String aliasedAttributeNameInTarget = AnnotationUtils.getAliasedAttributeName( attributeMethodInTarget, null); if (aliasedAttributeNameInTarget != null) { - Object aliasedValueInTarget = attributes.get(aliasedAttributeNameInTarget); - if (aliasedValueInTarget == null) { - attributes.put(aliasedAttributeNameInTarget, adaptedValue); - } + attributes.putIfAbsent(aliasedAttributeNameInTarget, adaptedValue); } } } diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAttributes.java b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAttributes.java index 8713c2967b..e3eab8da1e 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAttributes.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationAttributes.java @@ -158,6 +158,25 @@ public class AnnotationAttributes extends LinkedHashMap { return (T) value; } + /** + * Store the supplied {@code value} in this map under the specified + * {@code key}, unless a value is already stored under the key. + * @param key the key under which to store the value + * @param value the value to store + * @return the current value stored in this map, or {@code null} if no + * value was previously stored in this map + * @see #get + * @see #put + */ + @Override + public Object putIfAbsent(String key, Object value) { + Object obj = get(key); + if (obj == null) { + obj = put(key, value); + } + return obj; + } + @Override public String toString() { Iterator> entries = entrySet().iterator();