我知道我可以检索发送给方法的参数,但是如何才能获得该方法中定义的对象?例如,这是我的班级:
public class Sample {
public static void sendMessage(String message) {
String x = "string x";
System.out.println(message);
}
public static void main(String[] args) {
sendMessage("my message");
}
}
这是我的方面:
public aspect SampleAspect {
pointcut printMessage(String m) : call(void Sample.sendMessage(..)) && args(m);
before(String m) : printMessage(m) {
System.out.println("Before sending: " + m);
}
after(String m) : printMessage(m) {
System.out.println("After sending: " + m);
}
}
输出由参数组成,因为我写了&& args(m)
。
我如何从sendMessage获取另一个字符串x?
答案 0 :(得分:3)
无法从方面建议的方法访问局部变量。这是因为局部变量不会通过任何连接点公开。
如果需要访问局部变量,则必须重构目标代码以便公开它们。你可以这样做:
public class Sample {
public static void sendMessage(String message) {
String x = getX();
System.out.println(message);
}
public static String getX() {
return "string x";
}
public static void main(String[] args) {
sendMessage("my message");
}
}
然后,您可以建议调用方法getX
。如果您需要同时访问message
和x
,这仍然可以,但您需要使用虫洞模式来执行此操作。我可以解释这是否是你需要的。