Java基础之代理

举报
码农飞哥 发表于 2021/05/29 13:33:00 2021/05/29
1.7k+ 0 0
【摘要】 代理 创建代理对象 要想创建一个代理对象,需要使用Proxy类的newProxyInstance方法。这个方法有三个参数: 1. 一个类加载器,作为Java安全模型的一部分,对于系统类和从因特网上下载下来的类,可以使用 不同的类加载器。 2. 一个Class对象数组,每个元素都是需要实现的接口 3. 一个调用处理器。 使用代理可能出于很多原因,例如: 1...

代理

创建代理对象

要想创建一个代理对象,需要使用Proxy类的newProxyInstance方法。这个方法有三个参数:
1. 一个类加载器,作为Java安全模型的一部分,对于系统类和从因特网上下载下来的类,可以使用
不同的类加载器。
2. 一个Class对象数组,每个元素都是需要实现的接口
3. 一个调用处理器。

使用代理可能出于很多原因,例如:
1. 路由对远程服务器的方法调用。
2. 在程序运行期间,将用户接口事件与动作关联起来。
3. 为调试,跟踪方法调用。

public class ProxyTest { public static void main(String[] args) { Object[] elements = new Object[1000]; for (int i = 0; i < elements.length; i++) { Integer value = i + 1; TraceHandler traceHandler = new TraceHandler(value); Object proxy = Proxy.newProxyInstance(null, new Class[]{Comparable.class}, traceHandler); elements[i] = proxy; Integer key = new Random().nextInt(elements.length) - 1; int result = Arrays.binarySearch(elements, key); if (result >= 0) { System.out.println(elements[result]); } } }
}

class TraceHandler implements InvocationHandler { private Object target; public TraceHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(target); System.out.println("." + method.getName() + "("); if (args != null) { for (int i = 0; i < args.length; i++) { System.out.println(args[i]); if (i < args.length - 1) { System.out.println(","); } } System.out.println(")"); } return method.invoke(target, args); }
}
  
 

代理类的特性

代理类是在程序运行过程中创建的。然而,一旦被创建,就变成了常规类,与虚拟机中的任何其他类没有什么区别。

所有的代理类都扩展于Proxy类。一个代理类只有一个实例域—–调用处理器。它定义在Proxy的超类中。

文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。

原文链接:feige.blog.csdn.net/article/details/79191504

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。