Apache BCEL

Apache BCEL

ID:40524413

大小:100.49 KB

页数:15页

时间:2019-08-04

Apache BCEL_第1页
Apache BCEL_第2页
Apache BCEL_第3页
Apache BCEL_第4页
Apache BCEL_第5页
资源描述:

《Apache BCEL》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ApacheBCEL让您深入JVM汇编语言进行类操作的细节DennisM.Sosnoski(dms@sosnoski.com),总裁,SosnoskiSoftwareSolutions,Inc.DennisSosnoski(dms@sosnoski.com)是西雅图地区的Java咨询公司SosnoskiSoftwareSolutions,Inc.的创始人和首席顾问。他有30多年的专业软件开发经验,最近几年致力于服务器端的Java技术,包括servlet、EnterpriseJavaBeans和XML。他经常在全国性

2、的会议上就Java中的XML和J2EE技术发表言论。简介: ApacheByteCodeEngineeringLibrary(BCEL)可以深入Java类的字节码。可以用它转换现有的类表示或者构建新的类,因为BCEL在单独的JVM指令级别上进行操作,所以可以让您对代码有最强大的控制。不过,这种能力的代价是复杂性。在本文中,Java顾问DennisSosnoski介绍了BCEL的基本内容,并引导读者完成一个示例BCEL应用程序,这样您就可以自己决定是否值得以这种复杂性来换取这种能力。标记本文!发布日期: 2004年4

3、月01日级别: 初级访问情况: 4408次浏览评论: 0 (查看 

4、 添加评论-登录)平均分(8个评分)为本文评分在本系列的最后三篇文章中,我展示了如何用Javassist框架操作类。这次我将用一种很不同的方法操纵字节码——使用ApacheByteCodeEngineeringLibrary(BCEL)。与Javassist所支持的源代码接口不同,BCEL在实际的JVM指令层次上进行操作。在希望对程序执行的每一步进行控制时,底层方法使BCEL很有用,但是当两者都可以胜任时,它也使BCEL的使用比Javassist要

5、复杂得多。我将首先讨论BCEL基本体系结构,然后本文的大部分内容将讨论用BCEL重新构建我的第一个Javassist类操作的例子。最后简要介绍BCEL包中提供的一些工具和开发人员用BCEL构建的一些应用程序。BCEL类访问BCEL使您能够同样具备Javassist提供的分析、编辑和创建Java二进制类的所有基本能力。BCEL的一个明显区别是每项内容都设计为在JVM汇编语言的级别、而不是Javassist所提供的源代码接口上工作。除了表面上的差别,还有一些更深层的区别,包括在BCEL中组件的两个不同层次结构的使用——

6、一个用于检查现有的代码,另一个用于创建新代码。我假定读者已经通过本系列前面的文章熟悉了Javassist(请参阅侧栏不要错过本系列的其余部分)。因此我将主要介绍在开始使用BCEL时,可能会让您感到迷惑的那些不同之处。与Javassist一样,BCEL在类分析方面的功能基本上与Java平台通过RelfectionAPI直接提供的功能是重复的。这种重复对于类操作工具箱来说是必要的,因为一般不希望在所要操作的类被修改之前就装载它们。不要错过本系列的其余部分第1部分:“类和类装入”(2003年4月)第2部分,“引入反射”(

7、2003年6月)第3部分,“应用反射”(2003年7月)第4部分,“用Javassist进行类转换”(2003年9月)第5部分,“动态转换类”(2004年2月)第6部分,“用Javassist进行面向方面的更改”(2004年3月)BCEL在org.apache.bcel包中提供了一些基本常量定义,但是除了这些定义,所有分析相关的代码都在org.apache.bcel.classfile包中。这个包中的起点是JavaClass类。这个类在用BCEL访问类信息时起的作用与使用常规Java反射时,java.lang.Cl

8、ass的作用一样。JavaClass定义了得到这个类的字段和方法信息,以及关于父类和接口的结构信息的方法。与java.lang.Class不同,JavaClass还提供了对类的内部信息的访问,包括常量池和属性,以及作为字节流的完整二进制类表示。JavaClass实例通常是通过解析实际的二进制类创建的。BCEL提供了org.apache.bcel.Repository类用于处理解析。在默认情况下,BCEL解析并缓冲在JVM类路径中找到的类表示,从org.apache.bcel.util.Repository实例中得到

9、实际的二进制类表示(注意包名的不同)。org.apache.bcel.util.Repository实际上是二进制类表示的源代码的接口。在默认源代码中使用类路径的地方,可以用查询类文件的其他路径或者其他访问类信息的方法替换。改变类除了对类组件的反射形式的访问,org.apache.bcel.classfile.JavaClass还提供了改变类的方法。可以用这

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。