Struts学习笔记(五)拦截器上 拦截器的基本原理(动态代理)

来源:互联网 发布:无限流量软件 编辑:程序博客网 时间:2024/06/18 05:20

6.1拦截器动态代理

6.1.1建立被代理对象接口

package com.lei.interceptor;

public interfaceTargetInterface {

   public void Something();

}

6.1.2建立被代理对象

package com.lei.interceptor;

public classTarget implementsTargetInterface {

   @Override

   public void Something() {

      // TODO Auto-generated method stub

      System.out.println("do something");

   }

}

6.1.3建立拦截器类

package com.lei.interceptor;

public classInterceptor {

   public void before(){

      System.out.println("before");

   }

   public void after(){

      System.out.println("after");

   }

}

6.1.4建立处理器类

package com.lei.interceptor;

 

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

 

/**

 *@author renlei

 *真正的处理器

 */

public class MyHandler implementsInvocationHandler{

        

         privateObject object ;

         privateInterceptor interceptor = new Interceptor();

         publicObject getObject() {

                   returnobject;

         }

 

         publicvoid setObject(Object object) {

                   this.object= object;

         }

 

         @Override

         publicObject invoke(Object proxy, Method method, Object[] args)

                            throwsThrowable {

                   //TODO Auto-generated method stub

                   Objectresult  = null;

                   interceptor.before();

                   result= method.invoke(object, args);

        

                   interceptor.after();

 

                   returnresult;

         }

 

}

 

6.1.5产生动态代理

package com.lei.interceptor;

 

import java.lang.reflect.Proxy;

public classMyProxy {

   public Object getProxy(Objectobject){

      MyHandlermyHandler  = new MyHandler();

      myHandler.setObject(object);

      return Proxy.newProxyInstance(Target.class.getClassLoader(),object.getClass().getInterfaces(), myHandler);

     

   }

}

6.1.6实现Client

package com.lei.interceptor;

import java.lang.reflect.Proxy;

 

public classClient {

   public static void main(String []arsg){

      //生成被拦截对象

      TargetInterfacetarget=newTarget();

      MyProxymyProxy =newMyProxy();

      TargetInterfaceproxy = (TargetInterface)myProxy.getProxy(target);

      proxy.Something();

     

   }

}

原工程下载地址http://download.csdn.net/detail/renlei0109/7022859

0 0
原创粉丝点击