黑马程序员技术交流社区
标题:
代理的疑问
[打印本页]
作者:
咖啡
时间:
2011-11-10 23:04
标题:
代理的疑问
如何写代理?假如说某个类的代理?应该如何计算某个方法的时间
作者:
绿影
时间:
2011-11-11 02:00
代理,说白了就是,你指定写一个Proxy类帮另一个A类干活,但是Proxy类自己并不亲自干这个活,而是通过反射的方式让第三方具有相同功能的类C来干这个活,而Proxy自己在拿到这个c干好活得结果后对这个结果进行一些操作(当然也可以将结果原封不动的直接交给A),然后交给A。下面看一个实例:
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 ProxyArrayList_3 {
public static void main(String[] args) {
final ArrayList target = new ArrayList();
Collection proxy = (Collection) getProxy(target);//proxy是ArrayList的代理
proxy.add(1);
proxy.add(2);
proxy.add(3);
System.out.println(proxy.size());
System.out.println(proxy.getClass().getName());
}
public static Object getProxy(final Object target) {
Object proxy = Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
@Override
//invoke方法中就是对调用C类干活,并对返回的结果进行操作的过程
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
long beginTime = System.currentTimeMillis();
Object reValue = method.invoke(target, args);//调用C类中的方法干活
long endTime = System.currentTimeMillis();
//对结果进行操作:另加的计算方法运行的时间
System.out.println(method.getName() + "'s ran time is " + (endTime-beginTime));
return reValue;
}
});
return proxy;
}
}
复制代码
作者:
吉许
时间:
2011-11-11 11:02
去认真学习张老师的高新技术部分知识,原理懂了.你就能以不变应万变.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2