Class AbstractFallbackCacheOperationSource

java.lang.Object
org.springframework.cache.interceptor.AbstractFallbackCacheOperationSource
All Implemented Interfaces:
CacheOperationSource
Direct Known Subclasses:
AnnotationCacheOperationSource

public abstract class AbstractFallbackCacheOperationSource extends Object implements CacheOperationSource
Abstract implementation of CacheOperationSource that caches operations for methods and implements a fallback policy: 1. specific target method; 2. target class; 3. declaring method; 4. declaring class/interface.

Defaults to using the target class's declared cache operations if none are associated with the target method. Any cache operations associated with the target method completely override any class-level declarations. If none found on the target class, the interface that the invoked method has been called through (in case of a JDK proxy) will be checked.

Since:
3.1
Author:
Costin Leau, Juergen Hoeller
  • Field Details

    • logger

      protected final Log logger
      Logger available to subclasses.

      As this base class is not marked Serializable, the logger will be recreated after serialization - provided that the concrete subclass is Serializable.

  • Constructor Details

    • AbstractFallbackCacheOperationSource

      public AbstractFallbackCacheOperationSource()
  • Method Details

    • getCacheOperations

      @Nullable public Collection<CacheOperation> getCacheOperations(Method method, @Nullable Class<?> targetClass)
      Determine the cache operations for this method invocation.

      Defaults to class-declared metadata if no method-level metadata is found.

      Specified by:
      getCacheOperations in interface CacheOperationSource
      Parameters:
      method - the method for the current invocation (never null)
      targetClass - the target class for this invocation (can be null)
      Returns:
      CacheOperation for this method, or null if the method is not cacheable
    • getCacheKey

      protected Object getCacheKey(Method method, @Nullable Class<?> targetClass)
      Determine a cache key for the given method and target class.

      Must not produce same key for overloaded methods. Must produce same key for different instances of the same method.

      Parameters:
      method - the method (never null)
      targetClass - the target class (may be null)
      Returns:
      the cache key (never null)
    • findCacheOperations

      @Nullable protected abstract Collection<CacheOperation> findCacheOperations(Class<?> clazz)
      Subclasses need to implement this to return the cache operations for the given class, if any.
      Parameters:
      clazz - the class to retrieve the cache operations for
      Returns:
      all cache operations associated with this class, or null if none
    • findCacheOperations

      @Nullable protected abstract Collection<CacheOperation> findCacheOperations(Method method)
      Subclasses need to implement this to return the cache operations for the given method, if any.
      Parameters:
      method - the method to retrieve the cache operations for
      Returns:
      all cache operations associated with this method, or null if none
    • allowPublicMethodsOnly

      protected boolean allowPublicMethodsOnly()
      Should only public methods be allowed to have caching semantics?

      The default implementation returns false.