我想设计自己的注释,以便缓存从早期数据库调用中检索到的结果。
例如:
public class CountryService {
@MethodCache
public List<Country> getCountries();
@MethodCache
public Country getCountryById(int countryId);
@InvalidateMethodCache
public Country getCountryById(int countryId);
}
我想对我的更多/所有方法使用这种类型的注释。我需要什么来实现这种类型的注释?
@MethodCache:缓存方法结果。
@InvalidateMethodCache:清除缓存。
答案 0 :(得分:2)
使用spring-aop时的解决方案是创建一个方面来处理使用自定义注释注释的所有方法。粗略的实现看起来像这样:
Map<String, Object> methodCache = new HahsMap<>();
@Around("execution(@(@com.mypack.MethodCache *) *)")
public Object cacheMethod(ProceedingJoinPoint pjp) {
String cacheKey = getCacheKey(pjp);
if ( methodCache.get(cacheKey)) {
return methodCache.get(cacheKey);
} else {
Object result = pjp.proceed();
methodCache.put(cacheKey, result);
return result;
}
}
private String getCacheKey(ProceedingJoinPoint pjp) {
return pjp.getSignature().toString() + pjp.getTarget() + Arrays.asList(pjp.getArgs());
}
答案 1 :(得分:2)
如果有准备好的注释,那么最好使用它们
虽然你可以遵循这个,但我希望这能指导你
<强> 强>
答案 2 :(得分:2)
我已实施此功能,并在GITHUB上传了我的项目。
示例:
public class CountryService {
@MethodCache
public List<Country> getCountries();
@MethodCache
public Country getCountryById(int countryId);
@InvalidateMethodCache
public Country deleteCountryByID(int countryId);
}
答案 3 :(得分:0)
我使用spring / java实现了方法缓存..