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 实例。