【发布时间】:2018-05-27 17:16:18
【问题描述】:
我需要在调用 @CacheEvict 时调用某些功能。有没有办法在 Spring @CacheEvict 中调用要调用的侦听器或拦截器?
【问题讨论】:
-
如果我们查看@CacheEvict 的文档:注释表明一个方法(或类上的所有方法)会触发
org.springframework.cache.Cache.evict(Object)缓存驱逐操作。您可以创建 Aspects 来拦截此调用,但这取决于您使用的缓存框架(例如 GuavaCache、Ehcache 或简单的 Spring) -
我使用的是简单的 Spring 缓存。您能否给我一些指导,如何为我的以下方法创建一个方面 @CacheEvict(cacheNames="order", allEntries=true) public void getOrders(){}
-
这很简单,您可以找到大量示例 (mkyong.com/spring3/spring-aop-aspectj-annotation-example)。对于您的情况
"execution(* org.springframework.cache.ConcurrentMapCache.evict(..))",请为您选择最佳点,例如之前或之后。我希望应该可以工作,没有源代码我无法更好地解释。 -
更新类包:` "execution(* org.springframework.cache.concurrent.ConcurrentMapCache.evict(..))" `
-
非常感谢@borino。
标签: spring-mvc spring-boot spring-data spring-cache