0

我知道我可以检索发送给方法的参数,但我如何才能获得在该方法中定义的对象?例如,这是我的课:

    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?

4

1 回答 1

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

于 2013-06-11T22:40:44.403 回答