在同一项目中使用ASM和Javassist的注意事项

在同一项目中使用ASM和Javassist的注意事项,java,bytecode,javassist,java-bytecode-asm,Java,Bytecode,Javassist,Java Bytecode Asm,ASM和Javassist在生成/转换Java字节码方面似乎有不同的优点和缺点。 例如,Javassist的字节码生成工具非常容易使用,因为它只需在字符串中生成程序并动态编译即可。 然而,有时ASM的访问者方法似乎更适合其他类型的任务(例如,将Java例程翻译成另一种语言) 是否可以在同一个Java项目中使用这两个库,以便根据每个不同场景的需求从最方便的库中获益?。有什么特别需要考虑的吗?。我的直觉是,我不能同时使用两个库来处理同一类的字节码,但也许这是可能的?从常识上讲,如果您费心学习ASM和

ASM和Javassist在生成/转换Java字节码方面似乎有不同的优点和缺点。 例如,Javassist的字节码生成工具非常容易使用,因为它只需在字符串中生成程序并动态编译即可。 然而,有时ASM的访问者方法似乎更适合其他类型的任务(例如,将Java例程翻译成另一种语言)


是否可以在同一个Java项目中使用这两个库,以便根据每个不同场景的需求从最方便的库中获益?。有什么特别需要考虑的吗?。我的直觉是,我不能同时使用两个库来处理同一类的字节码,但也许这是可能的?

从常识上讲,如果您费心学习ASM和低级Java字节码,Javassist将有些冗余。但从实际的角度来看,没有什么能阻止你同时使用这两种方法。如果我没有弄错的话,Hibernate就是这么做的


至于在同一个类上使用ASM和Javassist,不必讨论每个框架API的细节,如果您只使用字节数组,您可以使用一个工具加载和转换,获得结果字节数组并使用另一个框架来处理该字节数组。

我不知道Hibernate会这样做(同时使用Javassist和ASM)。你有我可以读到的指针吗?或者你仅仅通过检查Hibernate代码就知道了?如果看看Hibernate的3.6.1 pom.xml,它将asm 3.1作为cglib 2.2的暂时依赖项。