2012-06-30 8 views
9

私は、自分のプロジェクトに属するすべてのパッケージのすべてのメソッドを計測する簡単なタイマーアスペクトを作成しています。それだけでなく、ゲッターのためのセッターのために働くAspectj @ Pointcut Javaのすべてのメソッド

...ここ

Error: applying to joinpoint that doesn't return 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(); 


} 

これを解決するための手がかりは非常に認めています。

おかげ

答えて

20

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

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

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

これは、すべての通話

の世話をします
関連する問題