拦截org.springframework.cache.interceptor.CacheInterceptor#invoke的spring aop
Posted
技术标签:
【中文标题】拦截org.springframework.cache.interceptor.CacheInterceptor#invoke的spring aop【英文标题】:spring aop that intercepts org.springframework.cache.interceptor.CacheInterceptor#invoke 【发布时间】:2015-12-16 09:16:24 【问题描述】:我尝试了以下代码,但它不起作用:
@Component
@Aspect
@Order(Integer.MAX_VALUE)
public class CacheAspect
@Around("execution(public * org.springframework.cache.interceptor.CacheInterceptor.invoke(..))")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//CLASS_CACHE.set(signature.getReturnType());
return joinPoint.proceed();
P.S. 我确定 CacheInterceptor
是一个 Spring 管理的 bean。
【问题讨论】:
什么menas“不起作用”? @JensCacheInterceptor#invoke
无法被拦截。
为什么要拦截拦截?!
@M.Deinum 我想将方法信息收集到 ThreadLocal 并在其他地方使用。
但是你真的要拦截拦截器吗?
【参考方案1】:
经过一些实验,我发现用用户定义的弹簧替换CacheInterceptor
内置的弹簧可以解决我的问题。
这是代码,以防有人有类似要求。
@Configuration
@EnableCaching
@Profile("test")
public class CacheConfig
@Bean
@Autowired
public CacheManager cacheManager(RedisClientTemplate redisClientTemplate)
return new ConcurrentMapCacheManager(redisClientTemplate, "test");
@Bean
public CacheOperationSource cacheOperationSource()
return new AnnotationCacheOperationSource();
@Bean
public CacheInterceptor cacheInterceptor()
CacheInterceptor interceptor = new MyCacheInterceptor();
interceptor.setCacheOperationSources(cacheOperationSource());
return interceptor;
MyCacheInterceptor.java,与CacheAspect
共享相同的逻辑:
public class MyCacheInterceptor extends CacheInterceptor
@Override
public Object invoke(MethodInvocation invocation) throws Throwable
Method method = invocation.getMethod();
//CLASS_CACHE.set(signature.getReturnType());
return super.invoke(invocation);
CacheInterceptor
bean 中内置的 spring 可以在 ProxyCachingConfiguration
类中找到。
希望对你有帮助。
【讨论】:
这个解决方案帮助我在我的自定义拦截器中使用缓存提供程序 put 方法,这使我能够设置 put 的驱逐时间,这不是 Spring 缓存抽象的一部分 - 我添加了 @Primary on cacheInterceptor() bean 方法,谢谢!以上是关于拦截org.springframework.cache.interceptor.CacheInterceptor#invoke的spring aop的主要内容,如果未能解决你的问题,请参考以下文章