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

时间:2012-07-09 06:17:09

标签: java spring caching annotations

我正在使用Spring缓存API并遇到了问题: 我有一个带有CRUD操作的Dao类,我想做的就是缓存一个无参数的方法,它返回一个对象Map(Key-id,Value-entity)

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的可缓存版本(使用插入,更新,删除操作)?

1 个答案:

答案 0 :(得分:0)

试试这个

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){...}

}