Class ConcurrentMapCacheManager

java.lang.Object
org.springframework.cache.concurrent.ConcurrentMapCacheManager
All Implemented Interfaces:
Aware, BeanClassLoaderAware, CacheManager

public class ConcurrentMapCacheManager extends Object implements CacheManager, BeanClassLoaderAware
CacheManager implementation that lazily builds ConcurrentMapCache instances for each getCache(java.lang.String) request. Also supports a 'static' mode where the set of cache names is pre-defined through setCacheNames(java.util.Collection<java.lang.String>), with no dynamic creation of further cache regions at runtime.

Supports the asynchronous Cache.retrieve(Object) and Cache.retrieve(Object, Supplier) operations through basic CompletableFuture adaptation, with early-determined cache misses.

Note: This is by no means a sophisticated CacheManager; it comes with no cache configuration options. However, it may be useful for testing or simple caching scenarios. For advanced local caching needs, consider CaffeineCacheManager or JCacheCacheManager.

Since:
3.1
Author:
Juergen Hoeller
See Also:
  • Constructor Details

    • ConcurrentMapCacheManager

      public ConcurrentMapCacheManager()
      Construct a dynamic ConcurrentMapCacheManager, lazily creating cache instances as they are being requested.
    • ConcurrentMapCacheManager

      public ConcurrentMapCacheManager(String... cacheNames)
      Construct a static ConcurrentMapCacheManager, managing caches for the specified cache names only.
  • Method Details

    • setCacheNames

      public void setCacheNames(@Nullable Collection<String> cacheNames)
      Specify the set of cache names for this CacheManager's 'static' mode.

      The number of caches and their names will be fixed after a call to this method, with no creation of further cache regions at runtime.

      Calling this with a null collection argument resets the mode to 'dynamic', allowing for further creation of caches again.

    • setAllowNullValues

      public void setAllowNullValues(boolean allowNullValues)
      Specify whether to accept and convert null values for all caches in this cache manager.

      Default is "true", despite ConcurrentHashMap itself not supporting null values. An internal holder object will be used to store user-level nulls.

      Note: A change of the null-value setting will reset all existing caches, if any, to reconfigure them with the new null-value requirement.

    • isAllowNullValues

      public boolean isAllowNullValues()
      Return whether this cache manager accepts and converts null values for all of its caches.
    • setStoreByValue

      public void setStoreByValue(boolean storeByValue)
      Specify whether this cache manager stores a copy of each entry (true or the reference (false for all of its caches.

      Default is "false" so that the value itself is stored and no serializable contract is required on cached values.

      Note: A change of the store-by-value setting will reset all existing caches, if any, to reconfigure them with the new store-by-value requirement.

      Since:
      4.3
    • isStoreByValue

      public boolean isStoreByValue()
      Return whether this cache manager stores a copy of each entry or a reference for all its caches. If store by value is enabled, any cache entry must be serializable.
      Since:
      4.3
    • setBeanClassLoader

      public void setBeanClassLoader(ClassLoader classLoader)
      Description copied from interface: BeanClassLoaderAware
      Callback that supplies the bean class loader to a bean instance.

      Invoked after the population of normal bean properties but before an initialization callback such as InitializingBean's InitializingBean.afterPropertiesSet() method or a custom init-method.

      Specified by:
      setBeanClassLoader in interface BeanClassLoaderAware
      Parameters:
      classLoader - the owning class loader
    • getCacheNames

      public Collection<String> getCacheNames()
      Description copied from interface: CacheManager
      Get a collection of the cache names known by this manager.
      Specified by:
      getCacheNames in interface CacheManager
      Returns:
      the names of all caches known by the cache manager
    • getCache

      @Nullable public Cache getCache(String name)
      Description copied from interface: CacheManager
      Get the cache associated with the given name.

      Note that the cache may be lazily created at runtime if the native provider supports it.

      Specified by:
      getCache in interface CacheManager
      Parameters:
      name - the cache identifier (must not be null)
      Returns:
      the associated cache, or null if such a cache does not exist or could be not created
    • removeCache

      public void removeCache(String name)
      Remove the specified cache from this cache manager.
      Parameters:
      name - the name of the cache
      Since:
      6.1.15
    • createConcurrentMapCache

      protected Cache createConcurrentMapCache(String name)
      Create a new ConcurrentMapCache instance for the specified cache name.
      Parameters:
      name - the name of the cache
      Returns:
      the ConcurrentMapCache (or a decorator thereof)