首页 文章

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

提问于
浏览
4

我试图在我的应用程序中使用Ehcache和内置缓存注释的Spring 3.1(@ CAache,@ 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 回答

  • 2

    这不会起作用,因为你使用相同的缓存值“userCache”但返回类型的方法getAllUsers是List并且addUser的返回类型是User . 这将导致存储在缓存中的数据不一致 .

    ( List + User ) : this type of data will be formed in cache.

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

    List userList = getAllUsers();

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

    As , ( List + User ) can not be cast in to List.

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

  • 7

    是的,这是因为返回类型无效 . @CachePut注释将方法的结果放入缓存中 . 在您的情况下,没有结果,因此没有任何内容放入缓存 .

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

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

相关问题