日期:2014-05-17  浏览次数:21049 次

跟我学aspectj之十一 ----- target() this() within()的区别

keyword: target this within difference 区别

?

经过上面的一个阶段的学习,你可能已经知道了这3个关键字,而且多是用来做过滤的。你是否很迷茫:到底他们有什么区别??首先来搭建测试环境。有如下代码:


?

?


?

这就是我们的测试环境: 一个Animal接口,2个实现类Snake和Bird以及TestMove测试类。 他们都有move()方法,那么下面我将给出不同的pointcut.让你先看输出结果,请一定要用心看每个测试的pointcut的细节变化,并将代码copy(或者手动输入)到eclipse中,执行,看结果、用心去体会,很多东西我们只可意会,无法言传。然后我们再来总结:

?

1、测试一

?


打印结果如下:

?

?

?

结果: 拦截到了所有的move(..)方法调用点。

?

2、测试二

?


打印:

?

?


结果:所有Animal 的实现类的move()方法都被拦截到了,说明target()的获取继承关系

?

?

3、测试三

?


打印:

?

?


结果: 没有拦截到任何方法。

?

?

4、测试四

?


打印:

?

?


结果: 在 TestMove类里