ASM和Javassist似乎在生成/转换Java字节码方面有不同的优点和缺点。 例如,Javassist的字节码生成工具非常容易使用,因为它就像在字符串中生成程序并在运行中编译它一样简单。 但是,有时ASM的访问者方法对于其他类型的任务似乎更方便(例如,将Java例程转换为另一种语言)。
是否可以在同一个Java项目中使用这两个库,这样我就可以根据每个不同场景的要求从最方便的库中获利?要记住什么特别的考虑因素?我有直觉,我不能使用两个库来操作同一个类的字节代码,但也许这可能吗?。
答案 0 :(得分:1)
从常识来看,如果您不耐烦地学习ASM和低级Java字节码,那么Javassist将会有些多余。但是从实际的角度来看,没有什么能阻止你使用它们。如果我没弄错的话,Hibernate就是这么做的。
至于在同一个类上使用ASM和Javassist,不考虑每个框架API的细节,如果你只使用字节数组,你可以只用一个工具加载和转换,得到结果字节数组并使用另一个框架处理该字节数组。