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 d4ae15af06b2..2562ffb9fd54 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -133,6 +133,9 @@ public class ResolvableType implements Serializable { @Nullable private volatile ResolvableType[] generics; + @Nullable + private volatile Boolean unresolvableGenerics; + /** * Private constructor used to create a new {@link ResolvableType} for cache key purposes, @@ -544,6 +547,15 @@ public boolean hasUnresolvableGenerics() { if (this == NONE) { return false; } + Boolean unresolvableGenerics = this.unresolvableGenerics; + if (unresolvableGenerics == null) { + unresolvableGenerics = determineUnresolvableGenerics(); + this.unresolvableGenerics = unresolvableGenerics; + } + return unresolvableGenerics; + } + + private boolean determineUnresolvableGenerics() { ResolvableType[] generics = getGenerics(); for (ResolvableType generic : generics) { if (generic.isUnresolvableTypeVariable() || generic.isWildcardWithoutBounds()) {