AspectJ、Spring AOP、GuiceなどのAOPフレームワークを使用せずに、カスタムアノテーションが付けられたメソッドの実行をインターセプトすることは可能ですか...デフォルトのJavaAPIのいずれかが可能かどうかを知りたいですこの目的で使用されます(リフレクションなど)。
ありがとう。
AspectJ、Spring AOP、GuiceなどのAOPフレームワークを使用せずに、カスタムアノテーションが付けられたメソッドの実行をインターセプトすることは可能ですか...デフォルトのJavaAPIのいずれかが可能かどうかを知りたいですこの目的で使用されます(リフレクションなど)。
ありがとう。
インスタンス化ロジックなどにフックすることなく、既存のメソッドのメソッド呼び出しを直接インターセプトすることはできません。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
で発行されたメソッドをインターセプトできますFoo
。class FooWrapper extends Foo{}
同じ結果を得るために、独自のラッパーを作成して動的プロキシを回避することもできます。
実行を制御できないため、リフレクションを使用して行うことはできません。ただし、独自のエージェントを作成できます。クラスを計測する必要がありますが、これはBCELのようなものを使用する方が簡単かもしれません。それはJavaフレームワークとコーシャと非常によく似ています。
リフレクションを使用してメソッドを呼び出すことはできますが、メソッドの呼び出しをインターセプトするために使用することはできません。同様に、Proxy
クラスを使用して動的呼び出しハンドラーを使用してプロキシを作成できますが、プロキシを対象としない既存のコードをインターセプトすることはできません。
したがって、答えはノーです。