2013-07-30 157 views
3

我试图在我的应用程序中使用Ehcache和Spring 3.1内置缓存注释(@Cacheable,@CacheEvict和@CachePut)来实现缓存。Spring的@CachePut注释是否可以使用void返回类型?

我创建了一个高速缓存如下:

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

我试图更新此缓存使用,如下@CachePut注释的新值:

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

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

回答

6

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

更改方法签名返回用户:ADDUSER的

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

这不会工作,因为你正在使用相同的缓存值“userCache”,但回归方法getAllUsers的类型列表,返回类型是用户。这会在已经存储在缓存中的数据中产生不一致。

(List + User):这种类型的数据将在缓存中形成。

后来当您将调用方法getAllUsers,代码将

列表用户列表= getAllUsers();

但是在这种情况下,数据将从缓存中获取并抛出“类转换异常”。

由于(列表+用户)不能转换为列表。

有没有解决方法?我坚持这一点,不知道如何继续。将使用自定义注释在这里工作?

相关问题