首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字节码操作模式

字节码操作模式
EN

Stack Overflow用户
提问于 2010-04-23 10:00:27
回答 5查看 3.1K关注 0票数 7

字节码操作有哪些合法用途,人们如何在实践中实现基于字节码操作的解决方案?

更新:--我应该更清楚地说明,这个问题实际上是关于人们使用什么模式和技术在字节码操作的帮助下使代码飞起来的。

类似于前面提到的面向方面的编程,或者动态构建代理对象以及类似的技术。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-23 10:05:33

字节码操作允许您实现任意复杂(且有趣的)程序转换,如:

  • 选定函数的输入/退出日志记录代码
  • 对某些API的访问进行存根的安全转换
  • API替代,例如,在测试工具中运行代码。

范围是无穷无尽的;这只是一个小样本。

至于这通常是如何完成的,请启动这里

票数 8
EN

Stack Overflow用户

发布于 2010-04-23 10:07:16

因此,可以读取字节码来实现解释器/ JVM。在为另一种语言(例如ScalaJython)实现Java编译器或编译器时,可以编写/生成字节码。您可以执行字节码操作来优化字节码(如果您想生产和销售字节码优化器,或者您需要它作为内部工具,使您的公司代码在竞争中处于领先地位)。类似地,您可能会操纵字节码,以便在分发之前混淆它。您还可以为面向方面的编程执行字节码操作;例如,您可能希望插入钩子(可能是为了计时、日志记录或其他原因),如果操作字节码比编辑所有源文件更简单或成本更低(例如,如果源代码不可用或来自许多不同的源,并不是所有源代码都在某个人的控制之下,或者说服这些团队添加这样的钩子既昂贵又费时),这可能是一种情况,即插入对最终字节码输出的修改,而不是试图修改原始代码(这可能需要更新或维护单独的叉),或者从只提供字节码的第三方购买源代码)。

您可以自己操作字节码,尽管有许多现有的开源库和框架可以这样做,包括BCELASM (仅举几个例子)。

票数 4
EN

Stack Overflow用户

发布于 2010-04-23 10:28:30

论文面向方面的设计模式 (PDF)和面向方面的设计原则:面向对象设计的启示 (PDF)描述了AOP/字节码操作的一些模式。

就我个人而言,我使用了ASM一个框架中的字节码操作来为使用该框架的类生成一些样板代码。该框架需要客户端代码的自定义等于()和hashCode()方法,因此我通过在Java代理中挂钩,从而在ClassLoader加载类时修改字节码来实现ClassLoader。我也多次使用CGLIB来生成动态代理(如果这算AOP的话)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2697657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档