Java 为什么在@Cacheable donds';没有任何影响?

Java 为什么在@Cacheable donds';没有任何影响?,java,spring,spring-boot,spring-cache,jcache,Java,Spring,Spring Boot,Spring Cache,Jcache,我有以下方法: @Cacheable(value = "pow_cache", unless = "#pow==3",condition = "#val<5&&#result<100") public Double pow(int val, int pow) throws InterruptedException { System.out.println(String.format("REAL invocation myService.pow(%s, %s)"

我有以下方法:

@Cacheable(value = "pow_cache", unless = "#pow==3",condition = "#val<5&&#result<100")
public Double pow(int val, int pow) throws InterruptedException {
    System.out.println(String.format("REAL invocation myService.pow(%s, %s)", val, pow));
    Thread.sleep(3000);
    return Math.pow(val, pow);
}
这意味着结果已缓存,但由于

condition = "#val<5&&#result<100"

condition=“#val基于此,
条件
之间存在差异,除非

公共抽象字符串,除非
用于否决方法缓存的Spring表达式语言(SpEL)属性。
与condition()不同,此表达式是在调用方法后计算的,因此可以引用结果。默认值为“”,这意味着缓存永远不会被否决

从 您只能在
中使用
#result
,除非

你可以试试

@Cacheable(value = "pow_cache", unless = "#pow==3||#result>100",condition = "#val<5")

@Cacheable(value=“pow_cache”,除非=“#pow==3 | |##result>100”,条件=“#valBut奇怪,我没有得到任何异常可能是它理解变量,但如前所述,它在方法调用之后不会像除非那样进行计算,因此它可以有一些默认值(0,null,”)这使得你的条件被错误地评估为真。只是我的假设:)这肯定会更有用一些例外情况在之前评估,所以我们没有任何结果,但除非在之后评估,否则我们有结果。是否正确?我们没有您的结果,但它可以从一开始初始化为某个默认值。。。不过,我对此并不确定:(
condition = "#val<5&&#result<100"
@Cacheable(value = "pow_cache", unless = "#pow==3||#result>100",condition = "#val<5")