Java动态代理机制分析及扩展,第2部分 - 编程入门网
Java动态代理机制分析及扩展,第2部分时间:2011-06-21 IBM / 王忠平 何平本文希望将 Java 动态代理机制从接口扩展到类,使得类能够享有与接口类 似的动态代理支持。 设计及特点 新扩展的类名为 ProxyEx,将直接继承于 java.lang.reflect.Proxy,也声 明了与原 Proxy 类中同名的 public 静态方法,目的是保持与原代理机制在使 用方法上的完全一致。 图 1. ProxyEx 类继承图 与原代理机制最大的区别在于,动态生成的代理类将不再从 Proxy 类继承, 改而继承需被代理的类。由于 Java 的单继承原则,扩展代理机制所支持的类数 目不得多于一个,但它可以声明实现若干接口。包管理的机制与原来相似,不支 持一个以上的类和接口同时为非 public;如果仅有一个非 public 的类或接口 ,假设其包为 PackageA,则动态生成的代理类将位于包 PackageA;否则将位于 被代理的类所在的包。生成的代理类也被赋予 final 和 public 访问属性,且 其命名规则类似地为“父类名 +ProxyN”(N 也是递增的阿拉伯数字)。最后, 在异常处理方面则与原来保持完全一致。 图 2. 动态生成的代理类的继承图 Java动态代理机制分析及扩展,第2部分(2)时间:2011-06-21 IBM / 王忠平 何平模板 通过对 Java 动态代理机制的推演,我们已经获得了一个通用的方法模板。 可以预期的是,通过模板来定制和引导代理类的代码生成,是比较可行的方法。 我们将主要使用两个模板:类模板和方法模板。 清单 1. 类模板
类模板定制了代理类的代码框架。其中带“&”前缀的标签位被用来引导 相应的代码替换。在此预留了包(&Package)、类名(&ClassName)、 类继承(&Extends)、接口实现(&Implements)、构造函数集 (&Constructors)及方法集(&Methods)的标签位。类模板还同时声 明了一个私有型的调用处理器对象作为类成员。 清单 2. 方法模板
方法模板定制了代理类方法集合中各个方法的代码框架,同样的带“&” 前缀的标签位被用来引导相应的代码替换。在此预留了修饰符(&Modifiers )、返回类型(&ReturnType)、方法名(&MethodName)、参数列表( Parameters)、异常列表(&Throwables)、方法的声明类(&Class) 、参数类型列表(&ParameterTypes)、调用处理器的参数值列表 (&ParameterValues),异常处理(&Exceptions)及返回值 (&Return)的标签位。 代码生成 有了类模板和方法模板,代码生成过程就变得有章可依。基本过程可分为三 步:1)生成代理类的方法集合;2)生成代理类的构造函数;3)最后生成整个 代理类。 Java动态代理机制分析及扩展,第2部分(3)时间:2011-06-21 IBM / 王忠平 何平生成代理类的方法集 第一步,通过反射获得被代理类的所有 public 或 protected 且非 static 的 Method 对象列表,这些方法将 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |