Class AbstractCachingMapDecorator<K,V>

java.lang.Object
org.springframework.binding.collection.AbstractCachingMapDecorator<K,V>
All Implemented Interfaces:
Serializable, Map<K,V>

public abstract class AbstractCachingMapDecorator<K,V> extends Object implements Map<K,V>, Serializable
A simple decorator for a Map, encapsulating the workflow for caching expensive values in a target Map. Supports caching weak or strong keys.

This class is an abstract template. Caching Map implementations should subclass and override the create(key) method which encapsulates expensive creation of a new object.

Since:
2.4
Author:
Keith Donald, Juergen Hoeller
See Also:
  • Constructor Details

    • AbstractCachingMapDecorator

      public AbstractCachingMapDecorator()
      Create a CachingMapDecorator with strong keys, using an underlying synchronized Map.
    • AbstractCachingMapDecorator

      public AbstractCachingMapDecorator(boolean weak)
      Create a CachingMapDecorator, using an underlying synchronized Map.
      Parameters:
      weak - whether to use weak references for keys and values
    • AbstractCachingMapDecorator

      public AbstractCachingMapDecorator(boolean weak, int size)
      Create a CachingMapDecorator with initial size, using an underlying synchronized Map.
      Parameters:
      weak - whether to use weak references for keys and values
      size - the initial cache size
    • AbstractCachingMapDecorator

      public AbstractCachingMapDecorator(Map<K,V> targetMap)
      Create a CachingMapDecorator for the given Map.

      The passed-in Map won't get synchronized explicitly, so make sure to pass in a properly synchronized Map, if desired.

      Parameters:
      targetMap - the Map to decorate
    • AbstractCachingMapDecorator

      public AbstractCachingMapDecorator(Map<K,V> targetMap, boolean synchronize, boolean weak)
      Create a CachingMapDecorator for the given Map.

      The passed-in Map won't get synchronized explicitly unless you specify "synchronize" as "true".

      Parameters:
      targetMap - the Map to decorate
      synchronize - whether to synchronize on the given Map
      weak - whether to use weak references for values
  • Method Details

    • size

      public int size()
      Specified by:
      size in interface Map<K,V>
    • isEmpty

      public boolean isEmpty()
      Specified by:
      isEmpty in interface Map<K,V>
    • containsKey

      public boolean containsKey(Object key)
      Specified by:
      containsKey in interface Map<K,V>
    • containsValue

      public boolean containsValue(Object value)
      Specified by:
      containsValue in interface Map<K,V>
    • remove

      public V remove(Object key)
      Specified by:
      remove in interface Map<K,V>
    • putAll

      public void putAll(Map<? extends K,? extends V> map)
      Specified by:
      putAll in interface Map<K,V>
    • clear

      public void clear()
      Specified by:
      clear in interface Map<K,V>
    • keySet

      public Set<K> keySet()
      Specified by:
      keySet in interface Map<K,V>
    • values

      public Collection<V> values()
      Specified by:
      values in interface Map<K,V>
    • entrySet

      public Set<Map.Entry<K,V>> entrySet()
      Specified by:
      entrySet in interface Map<K,V>
    • put

      public V put(K key, V value)
      Put an object into the cache, possibly wrapping it with a weak reference.
      Specified by:
      put in interface Map<K,V>
      See Also:
    • useWeakValue

      protected boolean useWeakValue(K key, V value)
      Decide whether to use a weak reference for the value of the given key-value pair.
      Parameters:
      key - the candidate key
      value - the candidate value
      Returns:
      true in order to use a weak reference; false otherwise.
    • get

      public V get(Object key)
      Get value for key. Creates and caches value if it doesn't already exist in the cache.

      This implementation is not synchronized: This is highly concurrent but does not guarantee unique instances in the cache, as multiple values for the same key could get created in parallel. Consider overriding this method to synchronize it, if desired.

      Specified by:
      get in interface Map<K,V>
      See Also:
    • create

      protected abstract V create(K key)
      Create a value to cache for the given key. Called by get if there is no value cached already.
      Parameters:
      key - the cache key
      See Also:
    • toString

      public String toString()
      Overrides:
      toString in class Object