1

AspectJ、Spring AOP、GuiceなどのAOPフレームワークを使用せずに、カスタムアノテーションが付けられたメソッドの実行をインターセプトすることは可能ですか...デフォルトのJavaAPIのいずれかが可能かどうかを知りたいですこの目的で使用されます(リフレクションなど)。

ありがとう。

4

3 に答える 3

1

インスタンス化ロジックなどにフックすることなく、既存のメソッドのメソッド呼び出しを直接インターセプトすることはできません。1 つのアプローチは、インスタンス化ロジックを、たとえばProxyを使用できるファクトリに分離することです。

public class FooFactry() {
     private InvocationHandler handler;

     public FooFactory(InvocationHandler handler) {
         this.handler = handler;
     }

     public Foo newInstance() {
        return (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
                              new Class[] { Foo.class },
                              handler);
     }
}

カスタムを使用して、InvocationHandlerで発行されたメソッドをインターセプトできますFooclass FooWrapper extends Foo{}同じ結果を得るために、独自のラッパーを作成して動的プロキシを回避することもできます。

于 2011-09-23T12:26:00.423 に答える
0

実行を制御できないため、リフレクションを使用して行うことはできません。ただし、独自のエージェントを作成できます。クラスを計測する必要がありますが、これはBCELのようなものを使用する方が簡単かもしれません。それはJavaフレームワークとコーシャと非常によく似ています。

于 2011-09-23T12:22:45.090 に答える
0

リフレクションを使用してメソッドを呼び出すことはできますが、メソッドの呼び出しをインターセプトするために使用することはできません。同様に、Proxyクラスを使用して動的呼び出しハンドラーを使用してプロキシを作成できますが、プロキシを対象としない既存のコードをインターセプトすることはできません。

したがって、答えはノーです。

于 2011-09-23T12:23:01.283 に答える