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 );
}
}