java - 在 Spring 中使用 @Cacheable 作为非参数方法

标签 java spring caching annotations

我在使用 Spring 缓存 API 时遇到了一个问题: 我有一个带有 CRUD 操作的 Dao 类,我想做的就是缓存一个无参数方法,该方法返回一个对象映射(键 - id,值 - 实体)

class Dao implements IDao<Entity>{

    public Map<Integer, Entity> getAllEntities(){ /* retreiving from DB */ }

    public Entity getEntityByKey(Object key) { ... }

    public void insert(Entity entity){...}

    public void update(Entity entity){...}

    public void delete(Entity entity){...}

}

谁能告诉我如何准确(正确)缓存 getAllEntities() 方法以获取实体,缓存 getEntityByKey 以按键获取实体,以及如何在执行创建、更新或删除操作时更新缓存? 更新后是否可以使用方法 getAllEntities 的可缓存版本(使用操作插入、更新、删除)?

最佳答案

试试这个

class Dao implements IDao<Entity>{

    @Cacheable(value = "entity.all")
    public Map<Integer, Entity> getAllEntities(){ /* retreiving from DB */ }

    @Cacheable(value = "entity.item", key="#p0")
    public Entity getEntityByKey(Object key) { ... }

    @CacheEvict(value = {"entity.all", "entity.item"}, allEntries=true)
    public void insert(Entity entity){...}

    @CacheEvict(value = {"entity.all", "entity.item"}, allEntries=true)
    public void update(Entity entity){...}

    @CacheEvict(value = {"entity.all", "entity.item"}, allEntries=true)
    public void delete(Entity entity){...}

}

关于java - 在 Spring 中使用 @Cacheable 作为非参数方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11389889/

相关文章:

java - 如何初始化 react 器 HttpClient 的基本身份验证 header ?

java - Spring MVC - HTTP 状态 404

java - Spring Boot Controller 错误

ASP.Net:返回时使页面过期

caching - plone.app.caching 仅用于首页

java - 如何在@PropertySources中引用单独的@PropertySource来获取值

javascript - 使用 Selenium(不带 Firefox 扩展)从 Firefox 43 检索控制台日志

java - GWT 的托管模式不起作用

java - 如何在 Apache Ignite 中获取已逐出的项目

java - 运行集成测试时如何将 Grails 作为 Web 应用程序启动