使用Spring缓存抽象,我想缓存itemExists
方法调用的结果。通过insertItem
方法插入项目时,我想将值true
放入缓存中。
class MyServiceImpl implements MyService {
private static final String CACHE_EXISTS_NAME = "existsCache";
@Override
@Cacheable(CACHE_EXISTS_NAME)
public boolean itemExists(Long id) {
// access the repository the check whether the item exists
}
@Override
@CachePut(cacheNames = CACHE_EXISTS_NAME, key = "#item.id")
public Item insertItem(Item item) {
...
}
}
我如何实现我的需要?
答案 0 :(得分:1)
不支持。解决方法可能是定义@Cacheable
说你的dao的finder方法,然后从itemExists方法调用它:
在DAO中:
@Cacheable(CACHE_EXISTS_NAME)
public Item findById(Long id) {
//..
}
在您的服务中:
@Override
public boolean itemExists(Long id) {
if(null == dao.findById(id)) {
return false;
} else {
return true;
}
}
请注意,由于方法调用是代理支持的,因此在同一对象(本例中为服务类)中定义和调用finder将导致注释被忽略。
答案 1 :(得分:-1)
我发现你的用例有点令人不安。如果你想查看特定项目是否在缓存中,为什么不问缓存而不是那些错综复杂的间接?您可以注入Cache
实例并询问其内容。
我想将您的代码更改为以下代码可能会有效但我真的不建议:
@Override
@CachePut(cacheNames = CACHE_EXISTS_NAME, key = "#item.id")
public boolean insertItem(Item item) {
...
return true;
}