类 CacheAspectSupport
- java.lang.Object
- org.springframework.cache.interceptor.AbstractCacheInvoker
- org.springframework.cache.interceptor.CacheAspectSupport
- 直接已知子类:
CacheInterceptor
public abstract class CacheAspectSupport extends AbstractCacheInvoker implements BeanFactoryAware, InitializingBean, SmartInitializingSingleton
Base class for caching aspects, such as theCacheInterceptor
or an AspectJ aspect.This enables the underlying Spring caching infrastructure to be used easily to implement an aspect for any aspect system.
Subclasses are responsible for calling relevant methods in the correct order.
Uses the Strategy design pattern. A
CacheOperationSource
is used for determining caching operations, aKeyGenerator
will build the cache keys, and aCacheResolver
will resolve the actual cache(s) to use.Note: A cache aspect is serializable but does not perform any actual caching after deserialization.
- 从以下版本开始:
- 3.1
- 作者:
- Costin Leau, Juergen Hoeller, Chris Beams, Phillip Webb, Sam Brannen, Stephane Nicoll
嵌套类概要
嵌套类 修饰符和类型 类 说明 protected class
CacheAspectSupport.CacheOperationContext
ACacheOperationInvocationContext
context for aCacheOperation
.protected static class
CacheAspectSupport.CacheOperationMetadata
Metadata of a cache operation that does not depend on a particular invocation which makes it a good candidate for caching.
字段概要
从类继承的字段 org.springframework.cache.interceptor.AbstractCacheInvoker
errorHandler
构造器概要
构造器 构造器 说明 CacheAspectSupport()
方法概要
所有方法 实例方法 具体方法 修饰符和类型 方法 说明 void
afterPropertiesSet()
Invoked by the containingBeanFactory
after it has set all bean properties and satisfiedBeanFactoryAware
,ApplicationContextAware
etc.void
afterSingletonsInstantiated()
Invoked right at the end of the singleton pre-instantiation phase, with a guarantee that all regular singleton beans have been created already.protected void
clearMetadataCache()
Clear the cached metadata.void
configure(Supplier<CacheErrorHandler> errorHandler, Supplier<KeyGenerator> keyGenerator, Supplier<CacheResolver> cacheResolver, Supplier<CacheManager> cacheManager)
Configure this aspect with the given error handler, key generator and cache resolver/manager suppliers, applying the corresponding default if a supplier is not resolvable.protected Object
execute(CacheOperationInvoker invoker, Object target, Method method, Object[] args)
protected <T> T
getBean(String beanName, Class<T> expectedType)
Return a bean with the specified name and type.protected CacheAspectSupport.CacheOperationMetadata
getCacheOperationMetadata(CacheOperation operation, Method method, Class<?> targetClass)
Return theCacheAspectSupport.CacheOperationMetadata
for the specified operation.CacheOperationSource
getCacheOperationSource()
Return the CacheOperationSource for this cache aspect.CacheResolver
getCacheResolver()
Return the defaultCacheResolver
that this cache aspect delegates to.protected Collection<? extends Cache>
getCaches(CacheOperationInvocationContext<CacheOperation> context, CacheResolver cacheResolver)
KeyGenerator
getKeyGenerator()
Return the defaultKeyGenerator
that this cache aspect delegates to.protected CacheAspectSupport.CacheOperationContext
getOperationContext(CacheOperation operation, Method method, Object[] args, Object target, Class<?> targetClass)
protected Object
invokeOperation(CacheOperationInvoker invoker)
Execute the underlying operation (typically in case of cache miss) and return the result of the invocation.protected String
methodIdentification(Method method, Class<?> targetClass)
Convenience method to return a String representation of this Method for use in logging.void
setBeanFactory(BeanFactory beanFactory)
Set the containingBeanFactory
forCacheManager
and other service lookups.void
setCacheManager(CacheManager cacheManager)
Set theCacheManager
to use to create a defaultCacheResolver
.void
setCacheOperationSource(CacheOperationSource cacheOperationSource)
Set the CacheOperationSource for this cache aspect.void
setCacheOperationSources(CacheOperationSource... cacheOperationSources)
Set one or more cache operation sources which are used to find the cache attributes.void
setCacheResolver(CacheResolver cacheResolver)
Set the defaultCacheResolver
that this cache aspect should delegate to if no specific cache resolver has been set for the operation.void
setKeyGenerator(KeyGenerator keyGenerator)
Set the defaultKeyGenerator
that this cache aspect should delegate to if no specific key generator has been set for the operation.从类继承的方法 org.springframework.cache.interceptor.AbstractCacheInvoker
doClear, doEvict, doGet, doPut, getErrorHandler, setErrorHandler
构造器详细资料
CacheAspectSupport
public CacheAspectSupport()
方法详细资料
configure
public void configure(@Nullable Supplier<CacheErrorHandler> errorHandler, @Nullable Supplier<KeyGenerator> keyGenerator, @Nullable Supplier<CacheResolver> cacheResolver, @Nullable Supplier<CacheManager> cacheManager)
Configure this aspect with the given error handler, key generator and cache resolver/manager suppliers, applying the corresponding default if a supplier is not resolvable.- 从以下版本开始:
- 5.1
setCacheOperationSources
public void setCacheOperationSources(CacheOperationSource... cacheOperationSources)
Set one or more cache operation sources which are used to find the cache attributes. If more than one source is provided, they will be aggregated using aCompositeCacheOperationSource
.
setCacheOperationSource
public void setCacheOperationSource(@Nullable CacheOperationSource cacheOperationSource)
Set the CacheOperationSource for this cache aspect.
getCacheOperationSource
@Nullable public CacheOperationSource getCacheOperationSource()
Return the CacheOperationSource for this cache aspect.
setKeyGenerator
public void setKeyGenerator(KeyGenerator keyGenerator)
Set the defaultKeyGenerator
that this cache aspect should delegate to if no specific key generator has been set for the operation.The default is a
SimpleKeyGenerator
.
getKeyGenerator
public KeyGenerator getKeyGenerator()
Return the defaultKeyGenerator
that this cache aspect delegates to.
setCacheResolver
public void setCacheResolver(@Nullable CacheResolver cacheResolver)
Set the defaultCacheResolver
that this cache aspect should delegate to if no specific cache resolver has been set for the operation.The default resolver resolves the caches against their names and the default cache manager.
getCacheResolver
@Nullable public CacheResolver getCacheResolver()
Return the defaultCacheResolver
that this cache aspect delegates to.
setCacheManager
public void setCacheManager(CacheManager cacheManager)
Set theCacheManager
to use to create a defaultCacheResolver
. Replace the currentCacheResolver
, if any.
setBeanFactory
public void setBeanFactory(BeanFactory beanFactory)
Set the containingBeanFactory
forCacheManager
and other service lookups.- 指定者:
setBeanFactory
在接口中BeanFactoryAware
- 参数:
beanFactory
- owning BeanFactory (nevernull
). The bean can immediately call methods on the factory.- 从以下版本开始:
- 4.3
- 另请参阅:
BeanInitializationException
afterPropertiesSet
public void afterPropertiesSet()
从接口复制的说明:InitializingBean
Invoked by the containingBeanFactory
after it has set all bean properties and satisfiedBeanFactoryAware
,ApplicationContextAware
etc.This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
- 指定者:
afterPropertiesSet
在接口中InitializingBean
afterSingletonsInstantiated
public void afterSingletonsInstantiated()
从接口复制的说明:SmartInitializingSingleton
Invoked right at the end of the singleton pre-instantiation phase, with a guarantee that all regular singleton beans have been created already.ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
calls within this method won't trigger accidental side effects during bootstrap.NOTE: This callback won't be triggered for singleton beans lazily initialized on demand after
BeanFactory
bootstrap, and not for any other bean scope either. Carefully use it for beans with the intended bootstrap semantics only.
methodIdentification
protected String methodIdentification(Method method, Class<?> targetClass)
Convenience method to return a String representation of this Method for use in logging. Can be overridden in subclasses to provide a different identifier for the given method.- 参数:
method
- the method we're interested intargetClass
- class the method is on- 返回:
- log message identifying this method
- 另请参阅:
ClassUtils.getQualifiedMethodName(java.lang.reflect.Method)
getCaches
protected Collection<? extends Cache> getCaches(CacheOperationInvocationContext<CacheOperation> context, CacheResolver cacheResolver)
getOperationContext
protected CacheAspectSupport.CacheOperationContext getOperationContext(CacheOperation operation, Method method, Object[] args, Object target, Class<?> targetClass)
getCacheOperationMetadata
protected CacheAspectSupport.CacheOperationMetadata getCacheOperationMetadata(CacheOperation operation, Method method, Class<?> targetClass)
Return theCacheAspectSupport.CacheOperationMetadata
for the specified operation.Resolve the
CacheResolver
and theKeyGenerator
to be used for the operation.- 参数:
operation
- the operationmethod
- the method on which the operation is invokedtargetClass
- the target type- 返回:
- the resolved metadata for the operation
getBean
protected <T> T getBean(String beanName, Class<T> expectedType)
Return a bean with the specified name and type. Used to resolve services that are referenced by name in aCacheOperation
.- 参数:
beanName
- the name of the bean, as defined by the operationexpectedType
- type for the bean- 返回:
- the bean matching that name
- 抛出:
NoSuchBeanDefinitionException
- if such bean does not exist- 另请参阅:
CacheOperation.getKeyGenerator()
,CacheOperation.getCacheManager()
,CacheOperation.getCacheResolver()
clearMetadataCache
protected void clearMetadataCache()
Clear the cached metadata.
execute
@Nullable protected Object execute(CacheOperationInvoker invoker, Object target, Method method, Object[] args)
invokeOperation
protected Object invokeOperation(CacheOperationInvoker invoker)
Execute the underlying operation (typically in case of cache miss) and return the result of the invocation. If an exception occurs it will be wrapped in aCacheOperationInvoker.ThrowableWrapper
: the exception can be handled or modified but it must be wrapped in aCacheOperationInvoker.ThrowableWrapper
as well.- 参数:
invoker
- the invoker handling the operation being cached- 返回:
- the result of the invocation
- 另请参阅:
CacheOperationInvoker.invoke()