1

アプリにある種のトレースを追加しようとしています。これは次のように機能します。構成でパッケージ名を設定すると、このパッケージのクラスのパブリックメソッドへのすべての呼び出しがログに記録されます。

ここでは(技術的な理由で)織りを使用できないため、spring-proxyを使用してみました。私のポイントカット

execution(public *  com.my.package.*.*(..))

そしてそれはうまくいきます。しかし、SpringがプロキシまたはCGLIBを使用してクラスをプロキシするので、各クラスは少なくとも

  • パラメータのないコンストラクタを持っている
  • すべてのメソッドは、いくつかのインターフェースの実装である必要があります

他のクラスはプロキシできませんでした。ログに記録しなくても大丈夫です。しかし、春はプロキシを作成し、私のアプリを台無しにします。

「パラメータのないコンストラクタがなく、そのメソッドの一部がインターフェイスの実装ではない場合は、このクラスをプロキシしないでください」と、Springにどのように伝えることができますか?

4

1 に答える 1

0

あなたの質問に対する答えはわかりませんが、トレースを行う別の方法は、注釈を使用することです。

public @interface Monitor {
}

側面:

public aspect MonitoringAspect {
pointcut methodToMonitor() : execution(@Monitor * *(..));
}

使用法:

@Monitor
public void methodToBeMonitored() {
}

このようにして、必要なメソッドにのみ影響を与えます。大きなプロジェクトでは、多くのメソッドを監視したいので、これはうまくいかないかもしれません。

于 2012-11-15T19:31:14.367 に答える