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

标签 java aop

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

它只适用于 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/

相关文章:

java - 从扩展的 Application 类停止 Android 服务

java - Java 的内存 SFTP 服务器有什么好的吗?

java - frontend-maven-plugin 执行两次

java - 使用 Docker 桥接网络时无法在集成测试中获取 JDBC 连接

c# - 关于 C# 的 AOP 的建议

java - HK2 MethodInterceptor 与 Jersey 资源

java - 无法使用 IBM Rational Application Developer 将 WAR 文件部署到 Websphere

aop - 面向方面的编程示例

java - 使用 AspectJ 捕获参数自定义注释