我试图尽可能简单地理解 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");
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们再看这个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());
Run Code Online (Sandbox Code Playgroud)
另一方面,您按如下方式更改声明的切入点,切入点选择 sayHello 方法声明public static void sayHello()。
public pointcut hello():
execution(static void HelloWorldSayer.sayHello());
Run Code Online (Sandbox Code Playgroud)
最后,请阅读此答案以更好地了解call()和execution():https :
//stackoverflow.com/a/18149106/904745
| 归档时间: |
|
| 查看次数: |
3014 次 |
| 最近记录: |