2012-06-30 17 views
9

Estoy escribiendo un aspecto de temporizador simple para instrumentar todos los métodos en todos los paquetes que pertenecen a mi proyecto. Pero, a continuación, los tipos de retorno de los distintos métodos en esas clases son diferentes y estoy consiguiendo este error siguiente :Aspectj @Around pointcut todos los métodos en Java

Sólo funciona para colocador pero no para captador ...

Error: applying to joinpoint that doesn't return void

y aquí está mi 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(); 


} 

Cualquier pista para resolver este es muy apreciada.

Gracias

Respuesta

20

Debe capturar la salida de su llamada y volver aconsejó que alrededor de su asesoramiento a lo largo de estas líneas:

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

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

Esto se hará cargo de todas sus llamadas

Cuestiones relacionadas