2012-06-30 13 views
9

sto scrivendo un semplice aspetto del timer per strumentare tutti i metodi in tutti i pacchetti che appartengono al mio progetto. Ma, poi i tipi di ritorno dei vari metodi di queste classi sono diverse e sto ottenendo questo errore seguente :Aspectj @Around pointcut tutti i metodi in Java

Funziona solo per setter, ma non per getter ...

Error: applying to joinpoint that doesn't return void

Ed ecco mia 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(); 


} 

Qualsiasi indizio per risolvere questo è molto apprezzato.

Grazie

risposta

20

Si dovrebbe catturare l'uscita dalla vostra chiamata CONSIGLIA e restituire che dal vostro giro consigli in questo senso:

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

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

Questo si prenderà cura di tutte le chiamate

Problemi correlati