【发布时间】:2020-01-14 02:40:57
【问题描述】:
有一个用@Cacheable注解的方法返回一个对象:
@Service
public class UserService {
@Cacheable("userData")
public UserData getUserData(String userName) {
UserData userData = new UserData();
userData.setGotFromCache(false);
return userData;
}
}
还有 UserData 对象:
@Getter
@Setter
public class UserData {
private boolean gotFromCache;
}
如何检测注解@Cacheable的方法是否被调用或输出是否来自缓存?
解决方法是注入CacheManager并手动检测:
Cache cache = this.cacheManager.getCache("userData");
UserData userData = null;
String userName = "some user name";
if (cache != null) {
Object key = SimpleKeyGenerator.generateKey(userName);
userData = cache.get(key, UserData.class);
if (userData != null) {
userData.setGotFromCache(true);
} else {
userData = userService.getUserData(userName);
cache.put(key, userData);
}
} else {
userData = userService.getUserData(userName);
}
然而,为了简单起见,这段代码没有使用@Cacheable注解。
是否可以使用@Cacheable 并检测输出是否来自缓存?
【问题讨论】:
标签: spring ehcache spring-annotations spring-cache