bugfix> java > 投稿

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);
}