【发布时间】:2015-12-26 04:06:08
【问题描述】:
这个问题真的很难用文字描述清楚。 很快,如果直接调用带有@Cacheable 标记的函数, 一切如预期。但是,如果在另一个中调用此 @Cacheable 函数 没有@Cacheable 的函数,缓存命中不符合预期。
请看代码: http://www.devbeacon.com/d/cache1.zip
非常感谢!
【问题讨论】:
标签: spring-cache
这个问题真的很难用文字描述清楚。 很快,如果直接调用带有@Cacheable 标记的函数, 一切如预期。但是,如果在另一个中调用此 @Cacheable 函数 没有@Cacheable 的函数,缓存命中不符合预期。
请看代码: http://www.devbeacon.com/d/cache1.zip
非常感谢!
【问题讨论】:
标签: spring-cache
documentation is pretty explicit about that
在代理模式下(默认),只有通过代理传入的外部方法调用会被拦截。这意味着自调用,实际上是目标对象中的一个方法调用目标对象的另一个方法,即使被调用的方法被标记为@Cacheable,也不会在运行时导致实际的缓存——考虑使用aspectj模式这种情况。
您的内部方法调用完全绕过代理。 query2 也应该有 @Cacheable。如果不想这样,则需要改用 AspectJ 模式。
【讨论】: