我想设计自己的注释,以便缓存从较早的数据库调用中检索到的结果。

例如:

public class CountryService {
 @MethodCache
 public List<Country> getCountries();

 @MethodCache
 public Country getCountryById(int countryId);

 @InvalidateMethodCache
 public Country getCountryById(int countryId);

}

我想在更多/所有方法中使用这种类型的注释。我需要实现这种类型的注释吗?

@MethodCache:缓存方法结果。
@InvalidateMethodCache:清除缓存。

最佳答案

使用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());
}

关于java - 我们如何在Java中实现方法缓存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31477852/

10-09 05:36