diff --git a/spring-core/src/main/java/org/springframework/core/ResolvableType.java b/spring-core/src/main/java/org/springframework/core/ResolvableType.java index 3a6d05752bb..6208bb0e765 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -36,6 +36,7 @@ import org.springframework.core.SerializableTypeWrapper.TypeProvider; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.ConcurrentReferenceHashMap; +import org.springframework.util.ConcurrentReferenceHashMap.ReferenceType; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -1129,11 +1130,12 @@ public final class ResolvableType implements Serializable { return NONE; } // Check the cache, we may have a ResolvableType that may have already been resolved + cache.purgeUnreferencedEntries(); ResolvableType key = new ResolvableType(type, typeProvider, variableResolver); ResolvableType resolvableType = cache.get(key); if (resolvableType == null) { resolvableType = new ResolvableType(type, typeProvider, variableResolver, null); - cache.put(key, resolvableType); + cache.put(resolvableType, resolvableType); } return resolvableType; }