动态代理和nanning AOP-3 
                                     用nanning来实现Interception 
关键字:  AOP  Nanning   Dynamic proxy AOP 动态代理 
  
       Interception ,是AOP的特点之一,但是Interception这个名次并不是和AOP的概念一同产生的。顾名思义,Interception就是拦截。本系列的第一篇文章使用java1.3提供的动态代理功能实现了一个Interception的例子,演示了在某个方法执行前和执行后进行了拦截(Interception)。 
       本文我们用nanning AOP来实现同样的功能。 
       注意AOP中的Interception和普通概念的interception是不同的。我们最后再讨论这个问题。 
       代码如下: 
package tcftest; 
import com.tirsen.nanning.AspectInstance; 
import com.tirsen.nanning.Aspects; 
import com.tirsen.nanning.Intf; 
import com.tirsen.nanning.IntfImpl; 
import com.tirsen.nanning.MixinInstance; 
import com.tirsen.nanning.NullInterceptor; 
public class tcftest { 
    public tcftest() { 
    } 
    public static void main(String[] args) { 
       AspectInstance aspectInstance = new AspectInstance(); 
       MixinInstance mixinInstance = new MixinInstance(); 
       mixinInstance.setInterfaceClass(Intf.class); 
       mixinInstance.setTarget(new IntfImpl()); 
       mixinInstance.addInterceptor(new NullInterceptor()); 
       aspectInstance.addMixin(mixinInstance); 
       Object bigMomma = aspectInstance.getProxy(); 
       Intf intf = (Intf) bigMomma; 
       intf.call();       
    } 
} 
  
消息拦截接口如下: 
package com.tirsen.nanning; 
import com.tirsen.nanning.definition.SingletonInterceptor; 
public class NullInterceptor implements MethodInterceptor, SingletonInterceptor { 
    public NullInterceptor() { 
    }; 
    public Object invoke(Invocation invocation) throws Throwable { 
       System.out.println("tcf : befor call me , right? "); 
       return invocation.invokeNext(); 
    } 
} 
输出结果如下: 
tcf : befor call me , right?  
call() 
  
关于: 
       Intf.class  
       IntfImpl.class 
类的代码可以参考上文实现,因为很简单,就不贴出来了。 
NullInterceptor.java 的代码,可以在nanning提供的测试包中找到。 
我在其中加入了:     System.out.println("tcf : befor call me , right? "); 
另外:Eclipse M8 的中文问题我还没有解决,谁知道的话请告诉我,谢谢。 
注意上面代码的蓝色代码: 
可以看到:intf.call() 在这个方法执行之前打印了我们预期的结果,成功地实现了消息的拦截。这个效果和本系列的第一篇文章介绍的java动态代理实现的效果一样。 
  
    现在是时候介绍用 java动态代理和nanning 实现Interception 的不同。 
AOP中的Interception是允许动态指定的,这个动态指定的点就是point cut。 
相信熟悉aop的读者对point cut 都了解。而普通的Interception就不能这样了,是固定写在java程序中。 当然如果你通过设计模式,配置文件等可以让Interception动态指定的话,那你也基本作了一个AOP 的Interception 。 
    这就是Nanning已经作的工作。 
下文我们分析nanningAOP的实现原理。 
  
作者:田春峰 
专栏地址:http://www.csdn.net/develop/author/NetAuthor/accesine960/ 
  
  
   
 
  |