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