- 3
- 0
- 约3.04千字
- 约 4页
- 2017-03-28 发布于重庆
- 举报
java代理
?从JDK1.3开始,Java就引入了动态代理的概念。动态代理(Dynamic Proxy)可以帮助你减少代码行数,真正提高代码的可复用度。例如,你不必为所有的类的方法里面都写上相同的Log代码行,取而代之的是实用类的动态代理类。当然,这种便利是有条件的。本文简单介绍Java动态代理的原理,并实现一个被代理的Servlet创建,和调用的过程。?1.代理模式(Proxy Pattern)在JDK1.3以前,代理模式就已流行,所以得代理模式是生成一个和类相同接口的代理类,用户通过使用代理类来封装某个实现类。如图1,其目的是加强实现类的某个方法的功能,而不必改变原有的源代码。2.动态代理(Dynamic Proxy)随着Proxy的流行,Sun把它纳入到JDK1.3实现了Java的动态代理。动态代理和普通的代理模式的区别,就是动态代理中的代理类是由java.lang.reflect.Proxy类在运行期时根据接口定义,采用Java反射功能动态生成的。和java.lang.reflect.InvocationHandler结合,可以加强现有类的方法实现。如图2,图中的自定义Handler实现InvocationHandler接口,自定义Handler实例化时,将实现类传入自定义Handler对象。自定义Handler需要实现invoke方法,该方法可以使用Java反射调用实现类的实现的方法,同时当然可以实现其他功能,例如在调用实现类方法前后加入Log。而Proxy类根据Handler和需要代理的接口动态生成一个接口实现类的对象。当用户调用这个动态生成的实现类时,实际上是调用了自定义Handler的invoke方法。?在Java中利用代理(Proxy)可以在运行时创建一个实现了一组给定接口的新类。? 在系统程序设计中,有时需要面对无法确定接口,却需要构造对象的情况。以前为了解决此问题,有些程序根据动态确定的接口,生成Java类文件,然后调用类加载器构造该对象,然后使用,这样一来无可避免性能问题。通过代理类,能够在不额外创建Java文件的情况下构造对象及调用该对象方法。? 使用代理的理由有很多,其中就有如下的情况: 1.路由对远程服务器的方法调用 2.在程序运行期间,将用户接口事件与行动关联起来 3.调试时跟踪方法调用? 以下举出一例,使用代理和调用处理器跟踪方法调用??Java代码??import?java.lang.reflect.InvocationHandler;??import?java.lang.reflect.Method;??import?java.lang.reflect.Proxy;??import?java.util.Arrays;??import?java.util.Random;???public?class?ProxyTest??{?public?static?void?main(String[]?args)???{?Object[]?elements?=?new?Object[1000];????//?fill?elements?with?proxies?for?the?integers?1?...?1000??for?(int?i?=?0;?i??elements.length;?i++)???{???Integer?value?=?i?+?1;???Class[]?interfaces?=?value.getClass().getInterfaces();???InvocationHandler?handler?=?new?TraceHandler(value);???Object?proxy?=?Proxy.newProxyInstance(null,???interfaces,?handler);???elements[i]?=?proxy;???}????//?construct?a?random?integer??Integer?key?=?new?Random().nextInt(elements.length)?+?1;????//?search?for?the?key??int?result?=?Arrays.binarySearch(elements,?key);????//?print?match?if?found??if?(result?=?0)?System.out.println(elements[result]);???}??}???/**??An?invocation?handler?that?prints?out?the?method?name??and?parameters,?then?invokes?the?original?method?*/?class?TraceHa
您可能关注的文档
最近下载
- 工程材料与机械制造基础(山东大学)中国大学MOOC 慕课 章节测验 答案.docx VIP
- 经皮去肾神经术治疗高血压临床路径中国专家共识(2025版).docx VIP
- 杜克LS-P激光测距仪说明书(打印).docx VIP
- 2026云南大理州南涧彝族自治县供排水有限责任公司考核招聘4人考试笔试参考题库及答案解析.docx VIP
- 2026年大理州南涧县供排水有限责任公司考核招聘工作人员(4人)考试笔试模拟试题及答案解析.docx VIP
- 药物临床试验应知应会.pdf VIP
- 2026云南大理州南涧彝族自治县供排水有限责任公司考核招聘4人考试笔试模拟试题及答案解析.docx VIP
- 红色小故事(完整版).doc VIP
- 2026云南大理州南涧彝族自治县供排水有限责任公司考核招聘4人考试笔试备考题库及答案解析.docx VIP
- 四川省泸州市泸县第二中学等六校联考2025-2026学年上学期九年级物理期末预测练习试卷( 含答案).pdf VIP
原创力文档

文档评论(0)