キャッシュに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()); //!
ご想像のとおり、 でマークされた行!
はキャッシュ インスタンスも更新しますが、これは私が望んでいるものではありません。
クライアントを変更せずにインターセプターのみを変更して、この動作を停止する方法を誰かが考えられますか?