Java AspectJ-循环迭代次数

Java AspectJ-循环迭代次数,java,aop,aspectj,Java,Aop,Aspectj,我可以使用AspectJ、aop方法或类的任何外部方法获得任何循环的多次循环迭代吗?想象一下,循环只增加局部变量(而不是方法参数),或者类似的东西,这是通过连接点无法得到的。我知道将joinpoint设置为局部变量是不可能的 public int iterationsOfLoop() { int count = 0; for(int i = 0, i<10; i++) { count++; } return count; } publi

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

public int iterationsOfLoop() {
    int count = 0;

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

    return count;
}
public int iterationsofolop(){
整数计数=0;

对于(inti=0,i我认为aspectJ不可能

还有其他方法,例如,测试中用于cobertura报告的库为您提供报告,计算程序通过每行的次数。这些库使用某种形式或代码插装

最相关的cobertura库可能是clover、emma或cobertura,您可以尝试查找有关这些库使用的技术的信息,并尝试做类似的事情

这不是一项容易的任务。

简短的回答,不

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


为什么你认为AOP是答案?这是因为你不能编辑源代码吗?它是为了分析的目的,几乎每一个度量,我将通过AOP访问,所以这是我的问题的原因。我不认为AOP是最好的答案,但是我在寻找解决方案并互相考虑。我可以编辑源代码,所以如果你有一个NY想法,解决方案,我将学习和考虑它。谢谢你,你总是可以实现一个简单的剖析器,这些事件你可以分析这些类可以订阅(因此代码改变)。。然后,您可以引发这些事件并让探查器分析代码执行。代码插装是我尝试的第一个解决方案之一,它可以工作,但我希望避免更改源代码,尽管这个问题不可能。