gpt4 book ai didi

java - 使用 AspectJ 公开上下文

转载 作者:行者123 更新时间:2023-12-01 23:45:55 24 4
gpt4 key购买 nike

我知道我可以检索发送到方法的参数,但是如何获取该方法中定义的对象?例如,这是我的类(class):

    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?

最佳答案

无法从方面建议的方法访问局部变量。这是因为局部变量不通过任何连接点公开。

如果您需要访问局部变量,那么您将必须重构目标代码以便公开它们。你可以这样做:

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。如果您需要同时访问 messagex,这仍然是可能的,但您需要使用虫洞模式来执行此操作。我可以解释这是否是您所需要的。

关于java - 使用 AspectJ 公开上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17052257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com