This() 与 Target() 方面
This() vs Target() aspectj
任何人都可以解释 aspectj 中 this()
和 target()
切入点之间的区别。我试着在别处找到这个,但似乎没有明确的答案。谢谢
在匹配的连接点,this()
是你所在的对象,target()
是你所在的对象invoking/referencing。可能会出现混淆,因为在 execution()
切入点匹配的情况下,它们是同一件事 - 包含匹配的执行连接点的对象与对象相同 运行 你的方法正在匹配。但在 call()
连接点的情况下,它们是不同的。进行调用的对象与调用该方法的对象不同。
class A {
public void m() {
B b = new B();
b.n();
}
}
class B {
public void n() {
}
}
对于该设置,切入点 execution(* m(..))
将匹配连接点 A.m()
并具有 A 类型的 this()
和 A 类型的 target()
(它们将是 A) 的同一个实例。但是,切入点 call(* n(..))
将在方法 A.m()
中调用 n()
的调用站点匹配,此时 this()
将是 A 进行调用的实例,而 target()
将是调用该方法的 B 实例。
任何人都可以解释 aspectj 中 this()
和 target()
切入点之间的区别。我试着在别处找到这个,但似乎没有明确的答案。谢谢
在匹配的连接点,this()
是你所在的对象,target()
是你所在的对象invoking/referencing。可能会出现混淆,因为在 execution()
切入点匹配的情况下,它们是同一件事 - 包含匹配的执行连接点的对象与对象相同 运行 你的方法正在匹配。但在 call()
连接点的情况下,它们是不同的。进行调用的对象与调用该方法的对象不同。
class A {
public void m() {
B b = new B();
b.n();
}
}
class B {
public void n() {
}
}
对于该设置,切入点 execution(* m(..))
将匹配连接点 A.m()
并具有 A 类型的 this()
和 A 类型的 target()
(它们将是 A) 的同一个实例。但是,切入点 call(* n(..))
将在方法 A.m()
中调用 n()
的调用站点匹配,此时 this()
将是 A 进行调用的实例,而 target()
将是调用该方法的 B 实例。