org.springframework.cache.support

Class AbstractValueAdaptingCache

  • java.lang.Object
    • org.springframework.cache.support.AbstractValueAdaptingCache
  • All Implemented Interfaces:
    Cache
    Direct Known Subclasses:
    CaffeineCache, ConcurrentMapCache, JCacheCache


    public abstract class AbstractValueAdaptingCache
    extends java.lang.Object
    implements Cache
    Common base class for Cache implementations that need to adapt null values (and potentially other such special values) before passing them on to the underlying store.

    Transparently replaces given null user values with an internal NullValue.INSTANCE, if configured to support null values (as indicated by isAllowNullValues().

    Since:
    4.2.2
    Author:
    Juergen Hoeller
    • Constructor Summary

      Constructors 
      Modifier Constructor and Description
      protected AbstractValueAdaptingCache(boolean allowNullValues)
      Create an AbstractValueAdaptingCache with the given setting.
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method and Description
      protected java.lang.Object fromStoreValue(java.lang.Object storeValue)
      Convert the given value from the internal store to a user value returned from the get method (adapting null).
      Cache.ValueWrapper get(java.lang.Object key)
      Return the value to which this cache maps the specified key.
      <T> T get(java.lang.Object key, java.lang.Class<T> type)
      Return the value to which this cache maps the specified key, generically specifying a type that return value will be cast to.
      boolean isAllowNullValues()
      Return whether null values are allowed in this cache.
      protected abstract java.lang.Object lookup(java.lang.Object key)
      Perform an actual lookup in the underlying store.
      protected java.lang.Object toStoreValue(java.lang.Object userValue)
      Convert the given user value, as passed into the put method, to a value in the internal store (adapting null).
      protected Cache.ValueWrapper toValueWrapper(java.lang.Object storeValue)
      Wrap the given store value with a SimpleValueWrapper, also going through fromStoreValue(java.lang.Object) conversion.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • AbstractValueAdaptingCache

        protected AbstractValueAdaptingCache(boolean allowNullValues)
        Create an AbstractValueAdaptingCache with the given setting.
        Parameters:
        allowNullValues - whether to allow for null values
    • Method Detail

      • isAllowNullValues

        public final boolean isAllowNullValues()
        Return whether null values are allowed in this cache.
      • get

        @Nullable
        public Cache.ValueWrapper get(java.lang.Object key)
        Description copied from interface: Cache
        Return the value to which this cache maps the specified key.

        Returns null if the cache contains no mapping for this key; otherwise, the cached value (which may be null itself) will be returned in a Cache.ValueWrapper.

        Specified by:
        get in interface Cache
        Parameters:
        key - the key whose associated value is to be returned
        Returns:
        the value to which this cache maps the specified key, contained within a Cache.ValueWrapper which may also hold a cached null value. A straight null being returned means that the cache contains no mapping for this key.
        See Also:
        Cache.get(Object, Class)
      • get

        @Nullable
        public <T> T get(java.lang.Object key,
                                   @Nullable
                                   java.lang.Class<T> type)
        Description copied from interface: Cache
        Return the value to which this cache maps the specified key, generically specifying a type that return value will be cast to.

        Note: This variant of get does not allow for differentiating between a cached null value and no cache entry found at all. Use the standard Cache.get(Object) variant for that purpose instead.

        Specified by:
        get in interface Cache
        Parameters:
        key - the key whose associated value is to be returned
        type - the required type of the returned value (may be null to bypass a type check; in case of a null value found in the cache, the specified type is irrelevant)
        Returns:
        the value to which this cache maps the specified key (which may be null itself), or also null if the cache contains no mapping for this key
        See Also:
        Cache.get(Object)
      • lookup

        @Nullable
        protected abstract java.lang.Object lookup(java.lang.Object key)
        Perform an actual lookup in the underlying store.
        Parameters:
        key - the key whose associated value is to be returned
        Returns:
        the raw store value for the key, or null if none
      • fromStoreValue

        @Nullable
        protected java.lang.Object fromStoreValue(@Nullable
                                                            java.lang.Object storeValue)
        Convert the given value from the internal store to a user value returned from the get method (adapting null).
        Parameters:
        storeValue - the store value
        Returns:
        the value to return to the user
      • toStoreValue

        protected java.lang.Object toStoreValue(@Nullable
                                                java.lang.Object userValue)
        Convert the given user value, as passed into the put method, to a value in the internal store (adapting null).
        Parameters:
        userValue - the given user value
        Returns:
        the value to store