diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java index 2c241f891d..77250c940c 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java @@ -288,6 +288,7 @@ public abstract class CacheAspectSupport extends AbstractCacheInvoker */ protected void clearMetadataCache() { this.metadataCache.clear(); + this.evaluator.clear(); } protected Object execute(CacheOperationInvoker invoker, Object target, Method method, Object[] args) { diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/ExpressionEvaluator.java b/spring-context/src/main/java/org/springframework/cache/interceptor/ExpressionEvaluator.java index 2c54521a3a..88ed1484c5 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/ExpressionEvaluator.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/ExpressionEvaluator.java @@ -123,6 +123,16 @@ class ExpressionEvaluator extends CachedExpressionEvaluator { return getExpression(this.unlessCache, methodKey, unlessExpression).getValue(evalContext, boolean.class); } + /** + * Clear all caches. + */ + void clear() { + this.keyCache.clear(); + this.conditionCache.clear(); + this.unlessCache.clear(); + this.targetMethodCache.clear(); + } + private Method getTargetMethod(Class targetClass, Method method) { AnnotatedElementKey methodKey = new AnnotatedElementKey(method, targetClass); Method targetMethod = this.targetMethodCache.get(methodKey);