AspectJ - 循环迭代次数

时间:2014-01-29 00:30:50

标签: java aop aspectj

我可以使用AspectJ或任何aop方法或类的任何外部方法获得任何循环的循环迭代次数吗?想象一下循环只增加局部变量(不是方法参数),或类似的东西,你无法通过连接点得到什么。我知道将join连接点设置为局部变量是不可能的。

public int iterationsOfLoop() {
    int count = 0;

    for(int i = 0, i<10; i++) {
        count++;
    }

    return count;
}

2 个答案:

答案 0 :(得分:0)

我认为使用aspectJ是不可能的。

还有其他方法,例如用于测试中的cobertura报告的库会显示计算程序通过每一行的次数的报告。这些库使用一些表单或代码检测。

最相关的cobertura库可能是clover,emma或cobertura,您可以尝试查找有关此库使用的技术的一些信息,并尝试执行类似的操作。

不是一件容易的事。

答案 1 :(得分:0)

简短回答,不。

大多数切入点定义只能绑定到方法调用,遗憾的是++不是。您可以使用cflow样式切入点,但这会绑定到每个指令执行,并且不会选择++。如果必须使用aspectj,那么更好的方法是使用带增量方法的Counter类。或者如果您没有绑定aspectj,然后使用ASM进行静态分析,您应该能够选择我认为通常用于for循环的字节码iinc,并插入自定义字节码来调用并通知您增量的自定义方面。

bytecode definitions for java

asm library for java