我正在编写一个简单的计时器方面来检测属于我的项目的所有包中的所有方法。但是,这些类中各种方法的返回类型不同,我得到以下错误:
它只适用于 setter 但不适用于 getter ...
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();
}
非常感谢任何解决此问题的线索。
谢谢
最佳答案
您应该从建议调用中捕获输出,并按照以下行从周围建议中返回:
@Around("execution(* com.myproject..*(..))")
public Object log(ProceedingJoinPoint pjp) throws Throwable{
....
Object result = pjp.proceed();
......
return result;
}
这将处理你所有的电话
关于java - Aspectj @Around 切入Java中的所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11270459/