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