我有一个应用程序,使用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()); //!
正如你所想象的那样,标记为!
的行也会更新缓存实例,而这不是我想要的。
有没有人能想出一种方法,在不修改客户端的情况下,仅通过拦截器来停止这种行为呢?
Cloneable
,因为它并没有将clone()
方法公开。我必须自己在__每个要缓存的对象中实现该方法__。 - Pablo Fernandez