java 代理二三事
来源:互联网 发布:免费mv制作软件 编辑:程序博客网 时间:2024/06/14 03:19
好了,图片看的也差不多了,让我们上手写一个小程序吧!
package com.heima.proxy;import java.lang.reflect.Proxy;import java.util.Arrays;public class TestProxy {public static void main(String[] args) {Object[] b = new Object[10];for (int i = 0; i < b.length; i++) {Integer e = i;TraceHandler traceHandler = new TraceHandler(i);Object integerProxy = Proxy.newProxyInstance(null,new Class[] {Comparable.class},traceHandler);/*该函数的文档说明:public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h) 返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。*/b[i] = integerProxy;}System.out.println(Arrays.binarySearch(b, 5));}}
package com.heima.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** *该类必须实现InvocationHandler接口,该接口只有一个方法: *public Object invoke(Object proxy, Method method, Object[] args)throws Throwable */public class TraceHandler implements InvocationHandler {Integer i;public TraceHandler(Integer i) {super();this.i = i;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {StringBuffer sb =new StringBuffer();sb.append(i);sb.append(".");sb.append(method.getName());sb.append("(");for (int i = 0; i < args.length; i++) {sb.append(args[i]);if(i < args.length - 1) sb.append(",");}sb.append(")");System.out.println(sb.toString());return method.invoke(i,args);}}
有哥们会问我也没有调用代理对象的方法a ,看Arrays.binarySearch(b, 5);这段函数的源码我们会知道,Arrays.binarySearch是利用参数对象的compareto()方法来一较高下的,所以呢~~!好了来看一下Arrays.binarySearch()的源码:
private static int binarySearch0(Object[] a, int fromIndex, int toIndex, Object key) { int low = fromIndex; int high = toIndex - 1; while (low <= high) { int mid = (low + high) >>> 1; @SuppressWarnings("rawtypes") Comparable midVal = (Comparable)a[mid]; @SuppressWarnings("unchecked") int cmp = midVal.compareTo(key); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found. }
本篇文章涉及到了StringBuffer类的一些知识和反射的知识,不明白的可以看一下帮助文档来学习StringBuffer类,反射可以参看Class类 Field类,Method类,和Constructor类。
那么代理这摸麻烦到底有什么作用呢??
1.路由对远程服务器方法的调用
2.在程序运行期间,将用户接口事件与动作联系起来
3.为跟踪,调试方法调用
4.等
1 0
- java 代理二三事
- Java 代理,动态代理
- java代理静态代理
- Java代理
- java代理
- java代理
- java 代理
- java代理
- JAVA 代理
- Java----代理
- java代理
- java代理
- java代理
- java代理
- java 代理
- java 代理
- java代理
- java代理
- 如何在 Linux 中复制文件到多个目录中
- 《C++ Primer Plus(第六版)》(24)(第十二章 类和动态内存分配 编程题和答案)
- Linux下的atime mtime ctime及如何用touch来修改
- NOSQL数据库基本知识
- org.springframework.web.util.IntrospectorCleanupListener的作用
- java 代理二三事
- 概率的定义与性质
- SQL中的DML、DDL以及DCL是什么?
- PostgreSQL中的数据库实例、模式、用户(角色)、表空间
- 图片加载框架之Glide
- Eclipse Maven "Missing artifact jdk.tools:jdk.tools:jar:1.6"
- 复习复习
- cmake命令学习备忘
- xshell使用技巧(转)