diff --git a/spring-context/src/main/java/org/springframework/cache/support/AbstractCacheManager.java b/spring-context/src/main/java/org/springframework/cache/support/AbstractCacheManager.java index 50ab5ccb31..981200b538 100644 --- a/spring-context/src/main/java/org/springframework/cache/support/AbstractCacheManager.java +++ b/spring-context/src/main/java/org/springframework/cache/support/AbstractCacheManager.java @@ -87,25 +87,26 @@ public abstract class AbstractCacheManager implements CacheManager, Initializing @Override @Nullable public Cache getCache(String name) { + // Quick check for existing cache... Cache cache = this.cacheMap.get(name); if (cache != null) { return cache; } - else { - // Fully synchronize now for missing cache creation... + + // The provider may support on-demand cache creation... + Cache missingCache = getMissingCache(name); + if (missingCache != null) { + // Fully synchronize now for missing cache registration synchronized (this.cacheMap) { cache = this.cacheMap.get(name); if (cache == null) { - cache = getMissingCache(name); - if (cache != null) { - cache = decorateCache(cache); - this.cacheMap.put(name, cache); - updateCacheNames(name); - } + cache = decorateCache(missingCache); + this.cacheMap.put(name, cache); + updateCacheNames(name); } - return cache; } } + return cache; } @Override