Java AOP中调用和执行的区别
我试图尽可能简单地理解AOP中执行和调用之间的区别。根据我收集的信息,execution()将在执行代码中添加一个连接点,因此在本例中,Java AOP中调用和执行的区别,java,aop,aspectj,Java,Aop,Aspectj,我试图尽可能简单地理解AOP中执行和调用之间的区别。根据我收集的信息,execution()将在执行代码中添加一个连接点,因此在本例中,HelloWorldSayer.sayHello(),但是如果切入点是call(),那么连接点将是HelloWorldSayer.main()。这是正确的吗 public class HelloWorldSayer { public static void main (String[] args) { sayHello(); }
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");
}
}
如果我们再看看
HelloWorldSayer
类,有4个连接点阴影(2个执行切入点和2个调用切入点)
换句话说,publicstaticvoidmain(String[]args)
和publicstaticvoidsayhello()
引用执行切入点<代码>(HelloWorldSayer.)sayHello()代码>和System.out.println(“你好”)代码>参考调用切入点
如果按如下方式更改声明的切入点,切入点将选择sayHello()代码>
另一方面,更改声明的切入点如下,切入点选择sayHello方法声明publicstaticvoidsayhello()
最后,请阅读此答案以更好地了解call()
和execution()
:
可能存在的副本
public pointcut hello():
call(static void HelloWorldSayer.sayHello());
public pointcut hello():
execution(static void HelloWorldSayer.sayHello());