Java字节码操作库建议

Java字节码操作库建议,java,frameworks,bytecode-manipulation,Java,Frameworks,Bytecode Manipulation,我正在寻找一个维护良好的Java字节码操作库,它具有直观的API。那里似乎有很多这样的人。关于尝试哪种方法的任何建议?对您的问题的最佳答案将取决于您的具体需求和目标;如果你能扩展你正在努力实现的目标,我也许可以提供一个更为量身定制的回应 然而,根据我的经验,它可能是成熟度、灵活性和易用性的最佳组合: 它正处于相对活跃的开发阶段:尽管最新版本是2009年6月发布的,但开发人员仍定期向他们的风投做出承诺 它已经在许多著名的Java产品中广泛使用,如AspectJ、Groovy、Cobertura和

我正在寻找一个维护良好的Java字节码操作库,它具有直观的API。那里似乎有很多这样的人。关于尝试哪种方法的任何建议?

对您的问题的最佳答案将取决于您的具体需求和目标;如果你能扩展你正在努力实现的目标,我也许可以提供一个更为量身定制的回应

然而,根据我的经验,它可能是成熟度、灵活性和易用性的最佳组合:

  • 它正处于相对活跃的开发阶段:尽管最新版本是2009年6月发布的,但开发人员仍定期向他们的风投做出承诺
  • 它已经在许多著名的Java产品中广泛使用,如AspectJ、Groovy、Cobertura和许多其他产品,这保证了广泛的用户基础和广泛的支持社区
  • 它有相当完整的文档记录,并且有许多教程、用户指南和参考文档可供用户和整个社区使用

N.B.下面@Yuri留下的评论描述了我个人还没有遇到的情况,但这可能会造成重大障碍。在评估各种字节码操作库时,请记住他的观察/经验。

这实际上取决于您如何定义直觉;-)两周前,我开始用它来完成我当前项目中的某项任务,效果非常好。我只花了几个小时就理解了它并能够使用它,但我并不认为API是直观的。但是,如果您对Java字节码略知一二,并且熟悉访问者模式,那么学习曲线就不是很高


ASM的另一个优点是,它显然与标准API捆绑在一起,至少在Sun JDK中是这样,尽管它是在不同的包(com.Sun.xml.internal.ws.org.objectweb.ASM和子包)中

有点老了,但仍然相关

ASM和Javassist是目前使用最多的。
Bcel正在消亡。

你是对的:从一些奇怪的API来看,人们对直觉的定义似乎有很大差异;)。我刚刚花了一点时间研究ASM,我远没有想象中那么害怕!我想我会坚持下去。谢谢你的回答。是的,对,不要使用实现包。也不要操纵字节码,除非你真的必须;-)很抱歉,问题中缺少细节。我不想透露我正在做什么的细节,但你的回答很有帮助。谢谢我想我最终会使用ASM。看看这个答案,我尝试了ASM,它(4.0)要么有一个bug,要么有非常奇怪的行为。我正在使用树API并在NLIST中迭代该方法的指令。现在,第一次迭代给出一个结果,第二次相同的迭代给出另一个结果——一条指令被复制并放在列表的顶部。根本没有修改代码,只是一个接一个地进行两次迭代。切换到Javassist。@YuriUshakov:这不是我个人经历过的情况。谢谢你的提醒!