@CacheEvict的动态参数

时间:2015-09-23 12:23:31

标签: java spring annotations ehcache

我正在我的项目中实现EHcache,我编写了一个方法,将从缓存中删除所有条目。该方法工作正常,这是代码片段:

 public void removeEntriesFromCache(String cacheName){
    CacheManager.getInstance.getCache(cacheName).removeAll();
}

我最终将此方法公开为休息服务,以便用户可以调用服务以及需要失效的缓存名称。但是,我希望能够使用@CacheEvict做同样的事情。我知道我可以这样做:

 @CacheEvict(name ="myCache" , allEntries=true)
public void removeEntriesFromCache(){

}

但是,此方法将从一个缓存中删除条目,在这种情况下,它将从“myCache”中删除所有缓存条目。我希望能够在运行时根据用户的指定动态解析缓存名称。

是否有可能实现这样的目标:

@CacheEvict(name ="${cacheName}" , allEntries=true)
public void removeEntriesFromCache(String cacheName){

}

@CacheEvict(name ="#cacheName" , allEntries=true)
public void removeEntriesFromCache(String cacheName){

}

欢迎您提出建议。

由于

1 个答案:

答案 0 :(得分:2)

@CacheEvict文档清楚地说明了可以使用SpEl的位置。您不能在name属性中使用SpEl,但是您可以将CacheManager注入到您正在注释的bean中,按名称获取Cache并清除它。

cacheManager.getCache(cacheName).clear()