Spring的@CachePut注释是否可以使用void返回类型?

时间:2013-07-30 11:58:19

标签: spring caching annotations ehcache

我试图在我的应用程序中使用Ehcache和内置缓存注释的Spring 3.1(@ Cryache,@ CacheEvict和@CachePut)实现缓存。

我创建了一个缓存,如下所示:

@Cacheable(value = "userCache", key = "#user.id")
public List<User> getAllUsers() {
...
}

我正在尝试使用@CachePut注释使用新值更新此缓存,如下所示:

@CachePut(value = "userCache", key = "#user.id")
public void addUser(User user) {
...
}

但是,新的“用户”未添加到缓存中。这是因为void返回类型吗?

2 个答案:

答案 0 :(得分:7)

是的,这是因为void返回类型。 @CachePut注释将方法的结果放入缓存中。在你的情况下,没有结果,所以没有任何东西放到缓存。

更改方法签名以返回用户:

public User addUser(User user) { 
   ...
}

答案 1 :(得分:2)

这不会起作用,因为你正在使用相同的缓存值&#34; userCache&#34;但返回类型的方法getAllUsers是List,返回类型的addUser是User。这将导致存储在缓存中的数据不一致。

(列表+用户):此类数据将在缓存中形成。

稍后当你调用方法getAllUsers时,代码将是

列出userList = getAllUsers();

但是在这种情况下,数据将从缓存中获取并抛出&#34; Class cast Exception&#34;。

因为,(列表+用户)无法转换为列表。

这有什么解决方案吗?我坚持这个,不知道如何继续。使用自定义注释会在这里工作吗?