如何从可缓存方法中获取非缓存结果?

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;

我找到了 condition and unless,但这些不符合我的要求。

通过@Cacheable的缓存机制是通过使用代理来实现的。要忽略缓存,你应该将代理解包到真正的目标对象中,并直接调用它的解包方法:

import org.springframework.aop.framework.AopProxyUtils;

...

@Autowired
private Some some;

void doOther() {
    Some unproxied = (Some) AopProxyUtils.getSingletonTarget(some);
    Some noncached = unproxied.getSome();
    ...
}