【问题标题】:Difference between call and execution in AOPAOP中调用和执行的区别
【发布时间】:2014-12-09 19:43:07
【问题描述】:

我试图尽可能简单地理解 AOP 中执行和调用之间的区别。据我所知,execution() 将在执行代码中添加一个连接点,因此在这种情况下为HelloWorldSayer.sayHello(),但如果切入点是call(),那么连接点将是HelloWorldSayer.main()。这是正确的吗?

public class HelloWorldSayer {
    public static void main (String[] args) {
        sayHello();
    }

    public static void sayHello() {
        System.out.println("Hello");
    }
}

public aspect World {
    public hello():
        execution(static void HelloWorldSayer.sayHello());

    after() hello() {
        System.out.println("Bye");
    }
}

【问题讨论】:

标签: java aop aspectj


【解决方案1】:

如果我们再次查看HelloWorldSayer 类,有 4 个连接点阴影(2 个执行切入点和 2 个调用切入点)。

换句话说,public static void main (String[] args)public static void sayHello() 指的是执行切入点。 (HelloWorldSayer.)sayHello();System.out.println("Hello"); 指的是调用切入点。

如果你改变声明的切入点如下,切入点选择sayHello();

public pointcut hello():
    call(static void HelloWorldSayer.sayHello());

另一方面,你改变声明的切入点如下,切入点选择sayHello方法声明public static void sayHello()

public pointcut hello():
    execution(static void HelloWorldSayer.sayHello());

最后,请阅读此答案以更好地了解call()execution()https://stackoverflow.com/a/18149106/904745

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    相关资源
    最近更新 更多