黑马程序员技术交流社区
标题:
代理类的应用举例
[打印本页]
作者:
男人你得有范
时间:
2014-8-24 19:34
标题:
代理类的应用举例
package com.itheima;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;
/**
* 第4题:写一个ArrayList类的代理,实现和ArrayList中完全相同的功能,并可以计算每个方法运行的时间。
*
* @author hp-pc
* */
public class Test4
{
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
@SuppressWarnings("rawtypes")
// new一个final类型的list集合
final ArrayList target = new ArrayList();
@SuppressWarnings("rawtypes")
/*
* 创建一个动态代理类实例 第一个参数:定义代理类的类加载器; 第二个参数:代理类要实现的接口列表; 第三个参数:指派方法调用的调用处理程序
*/
List proxy = (List) Proxy.newProxyInstance(List.class.getClassLoader(),
ArrayList.class.getInterfaces(), new InvocationHandler()
{
@Override
// 在代理实例上处理方法调用并返回结果
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable
{
//开始时间
long beginTime = System.currentTimeMillis();
//让进程暂停执行10毫秒,为了更明显的显示运行时间
Thread.sleep(10);
Object reVal = method.invoke(target, args);
//结束时间
long endTime = System.currentTimeMillis();
System.out.println(method.getName()
+ " running time is " + (endTime - beginTime)
+ "毫秒");
return reVal;
}
});
/*
* 运行结果
* add running time is 10毫秒
* add running time is 11毫秒
* add running time is 10毫秒
* add running time is 10毫秒
* remove running time is 11毫秒
*/
//通过方法向对象中增加字符串对象
proxy.add("gaozhihao");
proxy.add("gaozhihao");
proxy.add("gaozhihao");
proxy.add("heima");
proxy.remove("heima");
}
}
复制代码
作者:
天黑偷牛
时间:
2014-8-26 10:29
不要直发代码,加点文字简介
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2