This()vs Target()aspectj

时间:2015-12-16 07:02:33

标签: java aspectj pointcut

任何人都可以解释aspectj中this()target()切入点之间的区别。我尝试在其他地方找到这个,但似乎没有一个明确的答案。谢谢

1 个答案:

答案 0 :(得分:15)

在匹配的连接点,this()是您所在的对象,target()是您正在调用/引用的对象。可能会出现混淆,因为在联合点上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() 1}}将是调用该方法的B的实例。