Aspectj @Around切入Java中的所有方法

rb8*_*680 9 java aop

我正在编写一个简单的计时器方面来检测属于我的项目的所有包中的所有方法.但是,那些类中的各种方法的返回类型是不同的,我得到以下错误:

它只适用于制定者,但不适用于吸气剂......

错误:应用于不返回void的joinpoint

这是我的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();


}
Run Code Online (Sandbox Code Playgroud)

任何解决这个问题的线索都非常感谢.

谢谢

Bij*_*men 21

您应该从您的推荐电话中捕获输出,并从这些线路中返回您的周围建议:

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

....
Object result = pjp.proceed();
......
return result;
}
Run Code Online (Sandbox Code Playgroud)

这将照顾您的所有电话