Javaにアノテーションを付けて特定の関数をトレースする方法はありますか? FOO返す**アノテーションを使用したトレースの実行
**がfoo(5)
を入力:10
トレースが有効になっている場合は、私が得る、そして、class Foo { @trace int foo(int bar) { return bar + 5; } }
:私はこれを行うことができるようにしたいです
Javaにアノテーションを付けて特定の関数をトレースする方法はありますか? FOO返す**アノテーションを使用したトレースの実行
**がfoo(5)
を入力:10
トレースが有効になっている場合は、私が得る、そして、class Foo { @trace int foo(int bar) { return bar + 5; } }
:私はこれを行うことができるようにしたいです
あなたは@Around注釈
どのように私にして、この使用したスプリングAOPを行うことができますmplementのAOPロギング:
com.companyに以下のクラスを作成applicationContext.xmlを
<aop:aspectj-autoproxy/>
<context:annotation-config/>
<context:component-scan base-package="com.company.*"/>
にこれを追加*パッケージ:。
package com.company.*;
import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
@Component
@Aspect
public class AOPMethodLogger {
@Around("bean(*Service)")
public Object timeMethod(ProceedingJoinPoint joinPoint) throws Throwable {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Object retVal = joinPoint.proceed();
stopWatch.stop();
if(stopWatch.getTotalTimeMillis() > 35){
StringBuffer logMessageStringBuffer = new StringBuffer();
logMessageStringBuffer.append(joinPoint.getTarget().getClass().getName());
logMessageStringBuffer.append(".");
logMessageStringBuffer.append(joinPoint.getSignature().getName());
logMessageStringBuffer.append("(");
logMessageStringBuffer.append(joinPoint.getArgs());
logMessageStringBuffer.append(")");
logMessageStringBuffer.append(" execution time: ");
logMessageStringBuffer.append(stopWatch.getTotalTimeMillis());
logMessageStringBuffer.append(" ms");
System.out.println(logMessageStringBuffer.toString());
}
return retVal;
}
}
次の方法で注釈を追加することなく、これを行うことができますInTraceというツールを使用します。
注:InTraceは、私が書いた無料のオープンソースツールです。