alibaba / jetcache

JetCache is a Java cache framework.
Apache License 2.0
4.96k stars 1.03k forks source link

@Cached、@CacheUpdate中的key、value是否像postCondition 、condition可以使用SpEL访问到#result对象? #867

Open liumangafei opened 4 months ago

liumangafei commented 4 months ago

如标题,是否可以下面这样使用?

例子: @Cached(key="#result.id", value="#result")

我在文档中没有发现key、value中有提到可以使用#result 但我需求是在dao层,insert、update方法入参对象不完整,返回的对象才是我想要缓存的对象,不知是否支持?

areyouok commented 4 months ago

这是个先有鸡还是先有蛋的问题,key要先进行评估,然后才决定要不要执行方法(或者使用cache里面的数据返回),你都没有执行怎么会有result呢?

liumangafei commented 4 months ago

这是个先有鸡还是先有蛋的问题,key要先进行评估,然后才决定要不要执行方法(或者使用cache里面的数据返回),你都没有执行怎么会有result呢?

谢谢大佬答复。

我完整些举例表达,防止歧义:

@cached(key="#result.id", value="#result", postCondition="#result.id != null") User insert(User example);

@CacheUpdate(key="#result.id", value="#result", condition="#result.id != null") User update(User example);

两个例子中,实际都想表达方法执行后,缓存或更新方法结果; 由于@cached、@CacheUpdate文档中key、value未说明是否可以引用到#result,所以特此请教这样使用是否可以有效。

areyouok commented 4 months ago

key和value的表达式不能访问result,另外cached注解没有value这个属性。

你有特殊需要可以直接用api,不一定非要和注解死磕

liumangafei commented 4 months ago

key和value的表达式不能访问result,另外cached注解没有value这个属性。

你有特殊需要可以直接用api,不一定非要和注解死磕

好的,感谢大佬; 讲解很清晰。