Class AnnotationCacheOperationSource
- All Implemented Interfaces:
Serializable
,CacheOperationSource
CacheOperationSource
interface for working with caching metadata in annotation format.
This class reads Spring's Cacheable
, CachePut
and CacheEvict
annotations and exposes corresponding caching operation definition to Spring's cache
infrastructure. This class may also serve as base class for a custom
CacheOperationSource
.
- Since:
- 3.1
- Author:
- Costin Leau, Juergen Hoeller, Stephane Nicoll
- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static interface
Callback interface providingCacheOperation
instance(s) based on a givenCacheAnnotationParser
. -
Field Summary
Fields inherited from class org.springframework.cache.interceptor.AbstractFallbackCacheOperationSource
logger
-
Constructor Summary
ConstructorDescriptionCreate a default AnnotationCacheOperationSource, supporting public methods that carry theCacheable
andCacheEvict
annotations.AnnotationCacheOperationSource
(boolean publicMethodsOnly) Create a defaultAnnotationCacheOperationSource
, supporting public methods that carry theCacheable
andCacheEvict
annotations.AnnotationCacheOperationSource
(Set<CacheAnnotationParser> annotationParsers) Create a custom AnnotationCacheOperationSource.AnnotationCacheOperationSource
(CacheAnnotationParser annotationParser) Create a custom AnnotationCacheOperationSource.AnnotationCacheOperationSource
(CacheAnnotationParser... annotationParsers) Create a custom AnnotationCacheOperationSource. -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
By default, only public methods can be made cacheable.protected Collection<CacheOperation>
Determine the cache operation(s) for the givenAnnotationCacheOperationSource.CacheOperationProvider
.boolean
protected Collection<CacheOperation>
findCacheOperations
(Class<?> clazz) Subclasses need to implement this to return the cache operations for the given class, if any.protected Collection<CacheOperation>
findCacheOperations
(Method method) Subclasses need to implement this to return the cache operations for the given method, if any.int
hashCode()
boolean
isCandidateClass
(Class<?> targetClass) Determine whether the given class is a candidate for cache operations in the metadata format of thisCacheOperationSource
.Methods inherited from class org.springframework.cache.interceptor.AbstractFallbackCacheOperationSource
getCacheKey, getCacheOperations
-
Constructor Details
-
AnnotationCacheOperationSource
public AnnotationCacheOperationSource()Create a default AnnotationCacheOperationSource, supporting public methods that carry theCacheable
andCacheEvict
annotations. -
AnnotationCacheOperationSource
public AnnotationCacheOperationSource(boolean publicMethodsOnly) Create a defaultAnnotationCacheOperationSource
, supporting public methods that carry theCacheable
andCacheEvict
annotations.- Parameters:
publicMethodsOnly
- whether to support only annotated public methods typically for use with proxy-based AOP), or protected/private methods as well (typically used with AspectJ class weaving)
-
AnnotationCacheOperationSource
Create a custom AnnotationCacheOperationSource.- Parameters:
annotationParser
- the CacheAnnotationParser to use
-
AnnotationCacheOperationSource
Create a custom AnnotationCacheOperationSource.- Parameters:
annotationParsers
- the CacheAnnotationParser to use
-
AnnotationCacheOperationSource
Create a custom AnnotationCacheOperationSource.- Parameters:
annotationParsers
- the CacheAnnotationParser to use
-
-
Method Details
-
isCandidateClass
Description copied from interface:CacheOperationSource
Determine whether the given class is a candidate for cache operations in the metadata format of thisCacheOperationSource
.If this method returns
false
, the methods on the given class will not get traversed forCacheOperationSource.getCacheOperations(java.lang.reflect.Method, java.lang.Class<?>)
introspection. Returningfalse
is therefore an optimization for non-affected classes, whereastrue
simply means that the class needs to get fully introspected for each method on the given class individually.- Specified by:
isCandidateClass
in interfaceCacheOperationSource
- Parameters:
targetClass
- the class to introspect- Returns:
false
if the class is known to have no cache operation metadata at class or method level;true
otherwise. The default implementation returnstrue
, leading to regular introspection.
-
findCacheOperations
Description copied from class:AbstractFallbackCacheOperationSource
Subclasses need to implement this to return the cache operations for the given class, if any.- Specified by:
findCacheOperations
in classAbstractFallbackCacheOperationSource
- Parameters:
clazz
- the class to retrieve the cache operations for- Returns:
- all cache operations associated with this class, or
null
if none
-
findCacheOperations
Description copied from class:AbstractFallbackCacheOperationSource
Subclasses need to implement this to return the cache operations for the given method, if any.- Specified by:
findCacheOperations
in classAbstractFallbackCacheOperationSource
- Parameters:
method
- the method to retrieve the cache operations for- Returns:
- all cache operations associated with this method, or
null
if none
-
determineCacheOperations
@Nullable protected Collection<CacheOperation> determineCacheOperations(AnnotationCacheOperationSource.CacheOperationProvider provider) Determine the cache operation(s) for the givenAnnotationCacheOperationSource.CacheOperationProvider
.This implementation delegates to configured
CacheAnnotationParsers
for parsing known annotations into Spring's metadata attribute class.Can be overridden to support custom annotations that carry caching metadata.
- Parameters:
provider
- the cache operation provider to use- Returns:
- the configured caching operations, or
null
if none found
-
allowPublicMethodsOnly
protected boolean allowPublicMethodsOnly()By default, only public methods can be made cacheable.- Overrides:
allowPublicMethodsOnly
in classAbstractFallbackCacheOperationSource
-
equals
-
hashCode
public int hashCode()
-