3

実行中にメソッド内で実行されるメソッド呼び出しを(可能であれば)反映する方法を知りたいです。特に、外部メソッド呼び出し(つまり、他のクラスのメソッド)またはgetDatabaseConnection()などの特定のメソッドの呼び出しに関心があります。

私の意図は、メソッド内の事前定義されたオブジェクトのアクションを監視し、特定の値でメソッドが呼び出されるなど、特定の条件が満たされた場合に追加のコードを実行することです。モニターは完全に外部クラスまたはクラスのセットであり、リフレクション以外の方法でモニター対象のオブジェクトに直接アクセスすることはできません。

4

3 に答える 3

2

アスペクトJがあなたの問題を解決します。

次のようにポイントカットを定義してみてください。

pointcut profilling(): execution(public * *(..)) && (
            within(com.myPackage..*) ||

このようにして、パッケージ com.myPackage 内のパブリック メソッドへのすべての呼び出しをキャッチします。必要な数の内部句を追加します。

次に、次のコードを追加します。

Object around(): profilling() {

    //Do wherever you need before method call
    proceed();
    //Do wherever you need after method call

}

AspectJ についてもっと知りたい場合は、このガイドに従ってください。

于 2008-10-17T14:49:48.543 に答える
1

私はBCELがこれを行うことができると期待しています。Webサイトから:

Byte Code Engineering Libraryは、(バイナリ)Javaクラスファイル(.classで終わるファイル)を分析、作成、および操作するための便利な可能性をユーザーに提供することを目的としています。

ここで重要なのは「分析」の部分です。JavaDocは(私が見る限り)Webサイトに表示されないため、役立つかどうかは簡単にはわかりませんが、それは妥当な出発点です。

于 2008-10-17T08:55:16.060 に答える
1

BCELはこの機能を提供する必要がありますが、...

...要件はアスペクト指向プログラミング(AOP)によく似ているので、おそらくAspectJEclipseツールを使用)も確認する必要があります。

AspectJの主な利点は、特定の条件を表現するための適切に設計された方法を提供することです。

于 2008-10-17T09:20:19.270 に答える