ライブラリをプロファイリングするために、aspectj を使用したいと思います。私の計画は、プロファイリングが必要なメソッドを注釈でマークすることでした:
@Profiled("logicalUnitOfWork")
logicalUnitOfWork
そして、 を使用してプロファイリングされたコンテンツを強調表示するメソッドの前後に起動するアスペクトを用意します。
したがって、最初のポイントカットは次のようになります。ここには注釈の引数がないことに注意してください。これは、どうすればよいかわからないことの 1 つです。
pointcut profiled() : execution(@Profiled * *());
before() : profiled () {
// : the profiled logical name is in this variable:
String logicalEventType;
Profiler.startEvent (logicalEventType);
}
after() returning : profiled() {
// : the profiled logical name is in this variable:
String logicalEventType;
Profiler.endEvent (logicalEventType);
}
プロファイリングされるメソッドは、次のように定義されます。
@Profiled("someAction")
public void doAction (args...) {}
要するに、@Profiled
アノテーションの値をアスペクトに取り込むにはどうすればよいですか? 値に基づいてどのプロファイリングが発生するかを制限する必要はありません。アドバイスに表示される必要があるだけです。また、これを機能させるには、アノテーションの保持をランタイムに設定する必要がありますか、または代わりにクラスレベルの保持を使用できますか?