Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring3.1缓存-如何在SpEL中使用返回值_Java_Spring_Caching_Spring El - Fatal编程技术网

Java Spring3.1缓存-如何在SpEL中使用返回值

Java Spring3.1缓存-如何在SpEL中使用返回值,java,spring,caching,spring-el,Java,Spring,Caching,Spring El,我试图逐出Spring管理的缓存中的一个条目(Spring3.1抽象) 我需要在注释中的“key”属性的SpEL中引用方法的返回值: /* (How to refer to the 'T' returned value in the "KEY_ID"?) */ @Caching(evict = { @CacheEvict(value = CACHE_BY_ID, key = KEY_ID) }) public T delete(AppID appID, UserID userID) th

我试图逐出Spring管理的缓存中的一个条目(Spring3.1抽象)

我需要在注释中的“key”属性的SpEL中引用方法的返回值:

    /* (How to refer to the 'T' returned value in the "KEY_ID"?) */
@Caching(evict = { @CacheEvict(value = CACHE_BY_ID, key = KEY_ID) })
public T delete(AppID appID, UserID userID) throws UserNotFoundException {
    return inner.delete(appID, userID);
}

有没有办法做到这一点?

似乎没有办法引用返回的对象:

但你为什么要这么做?您可以参考@cacheexecute“key”值中的参数,例如:

@CacheEvict(value = CACHE_BY_ID, key = "#userID")
public T delete(AppID appID, UserID userID) throws UserNotFoundException {
...
}
更多示例代码响应以下关于必须使用用户对象的多个属性从多个缓存中逐出的响应:

@Caching(evict = {
    @CacheEvict(value = CACHE_BY_ID, key = "#user.userID"),
    @CacheEvict(value = CACHE_BY_LOGIN_NAME, key = "#user.loginName")
    // etc.
})
public T delete(AppID appID, User user) throws UserNotFoundException {
...
}

尝试使用#result in your SpEL

in(在1:04:00),Wiesner使用filterObject作为返回值的句柄,但这可能只是一个Spring安全句柄。我想值得一试。您还不能看到并参与其中。由“delete”返回的t-class对象是这样一个对象:类用户{UserID UserID;LoginName LoginName;EmailAddress EmailAddress;…}。我有不止一个缓存——一个按用户ID,另一个按登录名,另一个按电子邮件地址。当我通过userID删除一个条目时,我想让另外两个缓存中的条目也过期。。。这些键包含在返回值中,所以如果我能做到这一点就太好了:@cacheexecute(key=“#returnValue.loginName”…),@cacheexecute(key=“#returnValue.emailAddress”…)如果你把User对象作为参数而不是UserID传入,你就可以做到这一点,因为你可以在SpEL中引用不同的用户属性。如果您需要执行多个不同配置的\@cacheexecute,则必须将其与\@cache注释相结合:我用一些更适合您情况的示例代码编辑了我的答案,根据您的评论。传递整个用户对于这种情况不是一个好的解决方案-但我可以从旧版本中想到的唯一解决方案。我似乎记得它将在新版本中得到支持,我在春季看到了一个相关的JIRA。。。