带有ehcache的spring,缓存在不可缓存的函数调用中丢失

时间:2015-12-26 04:06:09

标签: spring-cache

这个问题很难在文字中清楚地描述。 很快,如果直接调用标有@Cacheable的函数, 一切如预期。但是,如果在另一个中调用此@Cacheable函数 没有@Cacheable的函数,缓存命中率不是预期的。

请看代码: http://www.devbeacon.com/d/cache1.zip

非常感谢!

1 个答案:

答案 0 :(得分:3)

documentation is pretty explicit about that

  

在代理模式(默认设置)下,只拦截通过代理进入的外部方法调用。这意味着实际上,自调用目标对象中的一个方法调用目标对象的另一个方法,即使被调用的方法用@Cacheable标记,也不会在运行时导致实际的缓存 - 考虑使用aspectj模式这种情况。

您的内部方法调用完全绕过代理。 query2也应该有@Cacheable。如果您不想要,则需要使用AspectJ模式。