import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;
public class ProxyDemo {
public static void main(String[] args) throws Exception{
Collection proxy3 = (Collection)Proxy.newProxyInstance(
Collection.class.getClassLoader(), // 第一个参数 类加载器
new Class[]{Collection.class},// 第二个参数 接口的数组, 注意是 大括号。
new InvocationHandler(){ // 第三个参数 handler的实例对象
ArrayList target =new ArrayList();
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
long beginTime = System.currentTimeMillis();
Object retVal = method.invoke(target, args);
long endTime = System.currentTimeMillis();
System.out.println(method.getName()+"running time of"+(endTime-beginTime));
return retVal;
}
});
// 每调用一次add 都会调用一次InvocationHandler的invoke方法,代理对象,代理对象的方法,代理对象的方法参数这三要素传递给invoke。
proxy3.add("zxx");
proxy3.add("bxd");
proxy3.add("lhm");
System.out.println(proxy3.size());
}
}
new InvocationHandler(){}究竟是如何别调用的 ? 什么时候执行的?
|