跟我学aspectj之十一 ----- target() this() within()的区别
keyword: target this within difference 区别
?
经过上面的一个阶段的学习,你可能已经知道了这3个关键字,而且多是用来做过滤的。你是否很迷茫:到底他们有什么区别??首先来搭建测试环境。有如下代码:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
打印:
?
?
打印:
?
?
结果: 其实这组不算测试,这组Demo是告诉大家target()和this 怎么获取他们自己当前的实例,以及他们如何将实例传给Advice使用
?
总结: 第一张我们介绍过,说apsectj是动态、静态植入结合的。 那么Target() this()就是属于他动态植入的方式,within是静态植入的。故target(),this()需要在运行时才能确定那些被拦截。 比如刚才的例子,我们在给Animal加多一个实现类,用target() 他仍然可以被拦截。 所以target()和this()会用继承关系作用,也就是说:如果你的signature是一个基类,那么这个pointcut同时也会对他的子类也起作用。
另外target 和 this 可以获取他们对应的实例。 但是within没法作到。
?
target()是指:我们pointcut 所选取的Join point 的所有者,直白点说就是: 指明拦截的方法属于那个类。
this()是指: 我们pointcut 所选取的Join point 的调用的所有者,就是说:方法是在那个类中被调用的。
?
ps: 关于 this的继承关系没有做测试,有兴趣的自己做一个。还是那句话:用心体会