9月9日

来源:互联网 发布:洛克王国刷宠物软件 编辑:程序博客网 时间:2024/04/27 22:18

代理的作用是:在执行被代理对象的方法前先执行代理对象的操作。

为此,代理对象中组合了一个代理处理器对象,当代理对象的方法被调用时,该代理对象、方法对象、参数对象数组都被传给代理处理器对象中的invoke()方法,invoke()方法中可以加入代理自己的处理和调用被代理对象中相应的方法。

   代理对象可以使用接口和代理处理器对象自动生成,用户就不用定义了。

public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,

InvocationHandler h)  throws IllegalArgumentException

   

package cn.itcast;

import java.util.*;

import java.lang.reflect.*;

 

interface InterBusiness

{

   public void processBusiness();

}

 

class Business implements InterBusiness

{

   public void processBusiness()

   {

      System.out.println( "处理业务逻辑" );

   }

}

 

class ProxyHandler implements InvocationHandler

{

   private Object pObjProxied;

  

   public ProxyHandler( Object pObjProxied )

   {

      this.pObjProxied = pObjProxied;

   }

  

   public Object invoke( Object proxy,Method pObjMethod,Object[] args ) throws Throwable

   {    

      System.out.println( proxy.getClass().getName() );

      System.out.println( pObjMethod.getName() );

      Object pObjResult = pObjMethod.invoke( pObjProxied,args );

      return pObjResult;

   }

}

 

public class ProxyFactory

{

   public static Object getProxy( Object pObjProxied )

   {

      Object proxy = Proxy.newProxyInstance( pObjProxied.getClass().getClassLoader(),

                pObjProxied.getClass().getInterfaces(),new ProxyHandler(pObjProxied) );

     return proxy;

   }

}

 

测试用例:

 

package cn.itcast;

import junit.framework.*;

 

public class TestMyProxy extends TestCase

{

   private Object pObjProxy;

  

   public TestMyProxy()

   {

      Business pObjBusiness = new Business();

      pObjProxy = ProxyFactory.getProxy( pObjBusiness );   

   }

  

   public void setUp()

   {

   }

  

   public void test()

   {

      assertTrue( pObjProxy instanceof InterBusiness );

   }

}

 

原创粉丝点击