1

インターフェイスへのすべてのメソッド呼び出しの呼び出しをインターセプトする必要があります。Java Dynamic Proxies を試しましたが、役に立ちません。これが達成できるかどうかさえわかりませんが、確認することを考えました。

したがって、基本的には、次のようなインターフェイスがあるとしましょう。

public interface Foo {        
   public String getValue();
}

Foo のどの実装からでも getValue() へのすべての呼び出しを傍受したいと思います。問題は、動的プロキシを使用できないため、Foo のさまざまな実装を制御できないことです。

これを行う方法はありますか?

ありがとう。

4

2 に答える 2

1

これを行う唯一の方法は、実装クラスをプロキシに置き換えるカスタム クラスローダーを使用することです。

Spring AOPの load-time weavingを使用して、これをすぐに実行できる場合があります

于 2012-03-30T11:44:39.570 に答える
1

AOP が役立つかもしれませんが、ご存じのように、オブジェクトの作成を制御できれば (Spring や Guice などの DI フレームワークのみを使用する場合でも)、すべてがはるかに簡単になります。

もう 1 つの方法は、コンパイル時のバイトコード ウィービングです。つまり、すべての実装を見つけて、コンパイル時にインターセプト コードが含まれるように変更します。

3 番目の選択肢は、エージェントまたはカスタム クラスローダーを使用して、クラスがシステムにロードされるときにウィービングを行うことです。これがロード時のウィービングです。しかし、たとえば、クラスローダーを完全に担当していない Web コンテナーにいる場合、これは難しいかもしれません。

于 2012-03-30T11:45:26.900 に答える