---------------------- android培训、java培训、期待与您交流! ----------------------
所谓代理就是一个中间人,例如当调用一个类的方法时不是直接去调用而是通过调用此类的代理类来实现相同的功能。
通过使用代理,可以增加比原有方法更丰富的功能。
直接写个例子:使用ArrayList的代理类实现ArrayList的全部方法
package com.heimatest.three;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ArrayProxy {
public List getArrayListProxy() {
//实例化动态代理
List proxy=(List)Proxy.newProxyInstance(
List.class.getClassLoader(),
new Class[]{List.class},
new InvocationHandler(){
//被代理的对象target
ArrayList target=new ArrayList();
/**
* @param proxy 代理
* @param method 代理实现的方法
* @param args 方法中的参数
*/
public Object invoke(Object proxy, Method method,Object[] args) throws Throwable {
long beginTime=System.currentTimeMillis();//获得method执行的开始时间
Object reVal= method.invoke(target, args);
long endTime=System.currentTimeMillis(); //获得method执行的结束时间
System.out.println("执行"+method.getName()+"方法花费时间为: "+(endTime-beginTime)+"毫秒");
return reVal;//返回method返回值
}
});
return proxy;
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------