我是 aspectj 的新手,我有一个函数可以获取整数变量并将其加 100,如下所示
public static void add(int no)
{
no=no+100;
}
我的方面如下
pointcut printMessage(int m) : execution(* add(..)) && args(m);
after(int m) returning: printMessage(m) {
System.out.println(m);
}
我用值 10 调用函数。但是当我运行代码时,它返回结果为 10。谁能告诉我为什么它不返回 110。如果我错了请纠正我
最佳答案
因为在 java 中 int 是不可修改的。如果你写
int i = 10;
add(i);
System.out.println(i);
您仍然会得到 10。因此,您的切面按照您的要求执行:您将一个值为 10 的变量传递给一个函数,该函数使用它的本地副本执行它想要的操作,然后返回变量不变
编辑:
如果你想获得一个修改后的值,你可以传递一个像数组这样的可修改变量,或者更简单地使用返回值(因为你当前的添加是一个无操作):
这里编辑 2 是完整的测试代码:
public class AspectTest {
public static int add(int i) {
return i+100;
}
@Test
public void test() throws Exception {
int j = add(10);
assertEquals(110, j);
add(20);
}
}
和:
aspect A {
pointcut printMessage() : execution(* add(..));
after() returning (int m): printMessage() {
System.out.println(m);
}
}
输出:
Running ...AspectTest
110
120
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.214 sec
关于java - aspectj 中的 After(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26251068/