Javaプログラムがあります。既存の(〜5k)関数の本体を変更せずに、すべての関数のエントリと終了をインターセプトしてログに記録したいと思います。
私はAspectJとSpring AOPがそれに適していることを知っています。しかし、残念ながら、ターゲットシステムでそれらを使用することは許可されていません(これは私の決定ではありません)。
1つの可能性は、次を使用することです。
void func()
{
logger.logEntry();
// here stuff
logger.logExit();
}
どうすればこれを達成できますかサードパーティのコンポーネント/ツールなし (これは非常に重要です!)これらの追加のトレースを挿入する必要はありませんか?この目的に使用できるJavaインターフェース/抽象クラスまたは他のメソッド/可能性はありますか?または、イベントハンドラ/購読者などですか?
グーグルで調べたところ、このためのサードパーティのソリューションのみが見つかりました。
2つの抽象関数を持つ抽象クラスが、そのクラスのメソッドが拡張クラスのメソッドから呼び出された場合に呼び出される場合、最高の魂は何でしょう。このような:
public abstract class InterceptFunctionCalls
{
// here the internal stuff that call the following methods below
protected abstract void EnteredFunction(String func);
protected abstract void ExitedFunction(String func);
}
回答 1 件
関連記事
- 印刷されたものの値を返さず、forループなしで、印刷する関数を繰り返し呼び出すにはどうすればよいですか?
- PYTHON TKINTER> e = Entry()> ebind( ''、function)
- Pythonで2Dベクトルエントリを使用して関数をプロットする
- 内容を複製せずに、すでにmap関数内にある配列をループする方法
- Luaのスクリプトで定義されている関数を使用せずに関数を実行する方法
- タイムスタンプ(タイムゾーンの有無にかかわらず)の最大関数はありますか?
- 仮想関数をオーバーライドせずに仮想関数を使用する目的
- Spark Core Rddmax()を使用せずにRDD関数の最大n行をフェッチする方法
いいえ。だからこそ、一部のサードパーティは必要に応じて提供することを決めました。拡張されていない言語としてのJavaは、AOPを提供しようとはしていません。