快速业务通道

Java编程的动态性,第5部分: 动态转换类 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
称和类型进行真正灵活的比较――简单的相等比较就能处理我感兴趣的大多数情况 ,而对该比较添加基本的通配符就能处理其余的所有情况了。处理这种情况的最容易方法是 使模式看起来像标准的 Java 方法声明,另外再进行一些扩展。

关于这种方法的例子,下面是几个与 test.StringBuilder 类的 String buildString (int) 方法相匹配的模式:

java.lang.String test.StringBuilder.buildString(int) test.StringBuilder.buildString(int) *buildString(int) *buildString

这些模式的通用模式首先是一个可选的返回类型(具有精确的文本),然后是组合起来的 类和方法名称模式(具有“*”通配字符),最后是参数类型列表(具有精确的文本)。如果 提供了返回类型,必须使用一个空格将它与方法名称匹配相隔离,而参数列表则跟在方法名 称匹配后面。为了使参数匹配更灵活,我通过两种方式来设置它。如果所给的参数是圆括号 括起的列表,它们必须精确匹配方法参数。如果它们是使用方括号(“[] ”)来括起的,所列出的类型全都必须作为匹配方法的参数来提供,不过该方法可 以按任何顺序使用它们,并且还可以使用附加的参数。因此 *buildString(int, java.lang.String) 将匹配其名称以“buildString”结尾的任何方法,并且这些方法精确地 按顺序接受一个 int 类型和一个 String 类型的参数。 *buildString [int,java.lang.String] 将匹配具有相同名称的方法,但是这些方法接受两个 或更多的 参 数,其中一个是 int 类型,另一个是 java.lang.String 类型。

清单 6 给出了我编写来处理这些模式的 javassist.Translator 子类的简略版本。实际 的匹配代码与本文并不真正相关,不过如果您想要查看它或亲自使用它,我已将它包括在了 下载文件中。使用这个 TimingTranslator 的主程序类是 BatchTiming ,它也包括在下载文 件中。

清单 6. 模式匹配转换程序

public class TimingTranslator implements Translator {    public TimingTranslator(String pattern) {      // build matching structures for supplied pattern      ...    }    private boolean matchType(CtMethod meth) {      ...    }    private boolean matchParameters(CtMethod meth) {      ...    }    private boolean matchName(CtMethod meth) {      ...    }    private void addTiming(CtMethod meth) {      ...    }    public void start(ClassPool pool) {}    public void onWrite(ClassPool pool, String cname)      throws NotFoundException, CannotCompileException {      // loop through all methods declared in class      CtClass clas = pool.get(cname);      CtMethod[] meths = clas.getDeclaredMethods();      for (int i = 0; i < meths.length; i++) {        // check if method matches full pattern        CtMethod meth = meths[i];        if (matchType(meth) &&          matchParameters(meth) && matchName(meth)) {          // handle the actual timing modification          addTiming(meth);        }      }    } }

后续内容

在上两篇文章中,您已经看到了如何使用 Javassist 来处理基本的转换。对于下一篇文 章,我们将探讨这个框架的高级特性,这些特性提供用于编辑字节代码的查找和替换技术。 这些特性使得对程序行为做出系统性的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号