春にはそれがサポートされています。
私はチュートリアルを探しましたが、驚くほど私は見つからなかったので、ここで説明しようとします。 (編集:私は私のブログhereにこの例を追加しました)
は、基本的には何が必要のようCustomizableTraceInterceptorクラスを拡張することです:
public class MyTraceInterceptor extends CustomizableTraceInterceptor {
protected void writeToLog(Log logger, String message, Throwable ex) {
if (ex != null) {
logger.info(message, ex);
} else {
logger.info(message);
}
}
protected boolean isInterceptorEnabled(MethodInvocation invocation, Log logger) {
return true;
}
}
パラメータを含むこのクラスのあなたの豆の周りにラップ、出力メソッドの呼び出し情報、戻り値と実行時間をログに記録します。 writeToLog()
メソッドを変更すると、データの出力先とその重大度を制御できます。
今、あなたが実際にあなたがラップしようとしている豆を選択するためにいくつかのXMLが必要です
<!-- Tracing -->
<bean name="traceInterceptor" class="MyTraceInterceptor" dependency-check="none">
<property name="enterMessage" value="ENTER: $[targetClassShortName].$[methodName]($[arguments])"/>
<property name="exitMessage"
value="EXIT: $[targetClassShortName].$[methodName]() : $[invocationTime]ms : $[returnValue]"/>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator" dependency-check="none">
<property name="beanNames" value="*RequestListener,*Notifier"/>
<property name="proxyTargetClass" value="true"/>
<property name="interceptorNames">
<list>
<value>traceInterceptor</value>
</list>
</property>
<property name="order" value="2"/>
</bean>
基本的に、あなたは「beanNames」と「注文」にワイルドカードでラップしたい豆は順序を制御定義あなたが他のAOPクラスを持っていない場合、それを削除することができます。 enterMessageプロパティとexitMessageプロパティを変更すると、出力の形式を変更することもできます。
これで十分です。説明が必要な場合は、躊躇しないでください。
アプリケーションはすでにスプリング駆動ですか? Spring管理Beanの一部であるメソッドをプロファイリングしようとしていますか? – skaffman
はい、ほとんどのアプリケーションはSpring-Drivenです。そして、私がプロファイルしたいメソッドはSpring Beanの一部です –
@AntoineClavalあなたはこれに答えてください:http://stackoverflow.com/questions/44070523/wrap-a-別のアスペクトのスプリングアスペクト –