快速业务通道

Java编程的动态性, 第4部分: 用Javassist进行类转换 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
uildString Interceptor method body: { int start = System.currentTimeMillis(); java.lang.String result = buildString$impl($); System.out.println("Call to method buildString took " +   (System.currentTimeMillis()-start) + " ms."); return result; } Added timing to method StringBuilder.buildString [dennis]$ java StringBuilder 1000 2000 4000 8000 16000 Call to method buildString took 1060856922184 ms. Constructed string of length 1000 Call to method buildString took 1060856922172 ms. Constructed string of length 2000 Call to method buildString took 1060856922382 ms. Constructed string of length 4000 Call to method buildString took 1060856922809 ms. Constructed string of length 8000 Call to method buildString took 1060856926253 ms. Constructed string of length 16000

Java编程的动态性, 第4部分: 用Javassist进行类转换(5)

时间:2011-04-09 IBM Dennis M. Sosnoski

取决于源代码中的内容,甚至可以让 Javassist 生成无效的字节码。清单7展示了这样的 一个例子,其中我将 JassistTiming 代码修改为总是认为计时的方法返回一个 int 值。 Javassist 同样会毫无问题地接受这个源代码,但是在我试图执行所生成的字节码时,它不 能通过验证。

清单7. 将一个 String 储存到一个 int 中

[dennis]$ java -cp javassist.jar:. JassistTiming StringBuilder  buildString Interceptor method body: { long start = System.currentTimeMillis(); int result = buildString$impl($); System.out.println("Call to method buildString took " +   (System.currentTimeMillis()-start) + " ms."); return result; } Added timing to method StringBuilder.buildString [dennis]$ java StringBuilder 1000 2000 4000 8000 16000 Exception in thread "main" java.lang.VerifyError:   (class: StringBuilder, method: buildString signature:   (I)Ljava/lang/String;) Expecting to find integer on stack

只要对提供给 Javassist 的源代码加以小心,这就不算是个问题。不过,重要的是要认 识到 Javassist 没有捕获代码中的所有错误,所以有可能会出现没有预见到的错误结果。

后续内容

Javassist 比我们在本文中所讨论的内容要丰富得多。下一个月,我们将进行更进一步的 分析,看一看 Javassist 为批量修改类以及为在运行时装载类时对类进行动态修改而提供的 一些特殊的功能。这些功能使 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号