我有一个使用 ehcache 进行缓存的应用程序(但我认为这个问题与框架无关),带有一个方法拦截器,所以基本上如果我将我的方法标记为缓存类似这样的东西:
public Object invoke(MethodInvocation mi) throws Throwable {
Object result = cache.get(key);
//key comes from MethodInvocation processing
if (result == null) {
result = mi.proceed();
cache.put(key, result);
}
return result;
}
到目前为止,一切都很好。我正在缓存一个返回的方法Array
,并像这样调用:
List<Object> result = methodWithCaching();
result.add(new Object()); //!
可以想象,标有的行!
也会更新缓存实例,这不是我想要的。
有人能想出一种方法来阻止这种行为而不修改客户端,只修改拦截器吗?