如何从可缓存方法中获取非缓存结果?
How to get non cached result from a cacheable method?
假设一个业务方法用 @Cacheable
注释。
@Component
class Some {
@Cacheable
public Some getSome() {
}
}
现在任何调用者都可以有条件地请求非缓存结果,就好像该方法根本没有用 @Cacheable
注释一样,既不驱逐缓存也不使用单独的方法?
void doOther() {
// How can I get non-cached live result from some#getSome()
}
@Autowired
private Some some;
通过@Cacheable
的缓存机制是通过使用代理来实现的。要忽略缓存,你应该将代理解包到真正的目标对象中,并直接调用它的解包方法:
import org.springframework.aop.framework.AopProxyUtils;
...
@Autowired
private Some some;
void doOther() {
Some unproxied = (Some) AopProxyUtils.getSingletonTarget(some);
Some noncached = unproxied.getSome();
...
}
假设一个业务方法用 @Cacheable
注释。
@Component
class Some {
@Cacheable
public Some getSome() {
}
}
现在任何调用者都可以有条件地请求非缓存结果,就好像该方法根本没有用 @Cacheable
注释一样,既不驱逐缓存也不使用单独的方法?
void doOther() {
// How can I get non-cached live result from some#getSome()
}
@Autowired
private Some some;
通过@Cacheable
的缓存机制是通过使用代理来实现的。要忽略缓存,你应该将代理解包到真正的目标对象中,并直接调用它的解包方法:
import org.springframework.aop.framework.AopProxyUtils;
...
@Autowired
private Some some;
void doOther() {
Some unproxied = (Some) AopProxyUtils.getSingletonTarget(some);
Some noncached = unproxied.getSome();
...
}