2012-03-30 21 views
1

インターフェイスへのすべてのメソッド呼び出しの呼び出しをインターセプトする必要があります。私はJava動的プロキシを通過しましたが、それは私を助けません。私はこれが達成できるかどうかも分かりませんが、確認することを考えました。Javaインターフェイスメソッドの呼び出しを傍受する

だから、基本的には次のように私はインターフェイスを持って言うことができます:

public interface Foo {   
    public String getValue(); 
} 

私がfooのいずれかの実装から)のgetValue(へのすべての呼び出しをインターセプトしたいと思います。問題は、Fooのさまざまな実装を制御できないためです。動的プロキシを使用できないためです。

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

ありがとうございました。

+0

Interfaceの代わりにAbstract.classを使用すると、各サブgetValue()によって呼び出されるプライベートメソッドを実装できるようになります –

答えて

1

AOPが役立つかもしれませんが、あなたが発見したように、(SpringやGuiceのようなDIフレームワークを介してのみであっても)オブジェクト作成を制御していると、はるかに簡単になります。

もう1つの方法は、コンパイル時にバイトコードを組み立てることです。つまり、すべての実装を見つけて、コンパイル時にその中に傍受コードを入れるように変更します。

第3の選択肢は、クラスがシステムにロードされるときに、エージェントまたはカスタムクラスローダーを使用して製織を行うことです。これは積み込み時間です。しかし、あなたがクラスローダーを完全に担当していないWebコンテナにいれば、これは難しいかもしれません。

1

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

Spring AOPのロードタイム織りですぐにこれを行うことができます。

+0

あなたの返信をありがとう。これは私の些細な心のためにすべてが複雑すぎるように見えます。あなたが私に指摘できる簡単な例がありますか? – user320550

関連する問題