10

プロジェクトに属するすべてのパッケージのすべてのメソッドをインストルメント化するための単純なタイマー アスペクトを作成しています。しかし、これらのクラスのさまざまなメソッドの戻り値の型が異なり、次のエラーが発生しています。

セッターでのみ機能し、ゲッターでは機能しません...

エラー: void を返さないジョインポイントに適用しています

そしてここに私のtimeraspect...

@Around("execution(* com.myproject..*(..))")
public void log(ProceedingJoinPoint pjp) throws Throwable{


    LOG.info("TimerAspect");
    String name = pjp.getSignature().getName();
    Monitor mon = MonitorFactory.start(name);
    pjp.proceed();
    mon.stop();

    LOG.info("TimerAspect Mon" + mon);

    String printStr = mon.getLabel()+","+mon.getUnits()+","+mon.getLastValue()+","+mon.getHits()+","+mon.getAvg()+","+mon.getTotal()+","+mon.getMin()+","+mon.getMax()+","+mon.getFirstAccess()+","+mon.getLastAccess();

    File f = new File("target/stats.csv");
    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(f, true));
    bufferedWriter.write(printStr);
    bufferedWriter.newLine();
    bufferedWriter.flush();
    bufferedWriter.close();


}

これを解決する手がかりは大歓迎です。

ありがとう

4

1 に答える 1

23

アドバイスされた呼び出しからの出力をキャプチャし、次の行に沿って周りのアドバイスからそれを返す必要があります。

@Around("execution(* com.myproject..*(..))")
public Object log(ProceedingJoinPoint pjp) throws Throwable{

....
Object result = pjp.proceed();
......
return result;
}

これにより、すべての通話が処理されます

于 2012-06-30T00:30:01.313 に答える