Java动态代理机制分析及扩展,第2部分 - 编程入门网
0;第二步传入字节码数组及其他相关信 息并反射调用该方法以完成类的动态装载。
清单 14. ProxyEx 的静态方法 defineClassHelper
性能改进 原动态代理机制中对接口数组有一些有趣的特点,其中之一就是接口的顺序 差异会在一定程度上导致生成新的代理类,即使其实并无必要。其中的原因就是 因为缓存表是以接口名称列表作为关键字,所以不同的顺序就意味着不同的关键 字,如果对应的关键字不存在,就会生成新但是作用重复的代理类。在 ProxyEx 类中,我们通过主动排序避免了类似的问题,提高动态生成代理类的效率。而且 ,如果发现数组中都是接口类型,则直接调用父类 Proxy 的静态方法 getProxyClass 生成代理类,否则才通过扩展动态代理机制生成代理类,这样也 一定程度上改进了性能。 兼容性问题 接下来需要考虑的是与原代理机制的兼容性问题。曾记否,Proxy 中还有两 个静态方法:isProxyClass 和 getInvocationHandler,分别被用于判断 Class 对象是否是动态代理类和从 Object 对象获取对应的调用处理器(如果可能的话 )。 清单 15. Proxy 的静态方法 isProxyClass 和 getInvocationHandler
现在的兼容性问题,主要涉及到 ProxyEx 类与父类 Proxy 在关于动态生成 的代理类的信息方面所面临的如何保持同步的问题。曾介绍过,在 Proxy 类中 有个私有的 Map 对象 proxyClasses 专门负责保存所有动态生成的代理类类型 。Proxy 类的静态函数 isProxyClass 就是通过查询该表以确定某 Class 对象 是否为动态代理类,我们需要做的就是把由 ProxyEx 生成的代理类类型也保存 入该表。这部分工作由 ProxyEx 类的静态方法 addProxyClass 辅助完成。 清单 16. ProxyEx 的静态方法 addProxyClass
Java动态代理机制分析及扩展,第2部分(10)时间:2011-06-21 IBM / 王忠平 何平相对而言,原来 Proxy 类的静态方法 getInvocationHandler 实现相当简单 ,先判断是否为代理类,若是则直接类型转换到 Proxy 并返回其调用处理器成 员,而扩展后的代理类并不非从 Proxy 类继承,所以在获取调用处理器对象的 方法上需要一些调整。这部分由 ProxyEx 类的同名静态方法 getI |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |