据我所知,2个框架都是静态的,可以将监控代码注入到类代码中。那么,有什么区别?
答案 0 :(得分:4)
ASM是一个框架/库,它为您提供了一个API来操作现有的字节码和/或轻松生成新的字节码。
另一方面,AspectJ是一种基于Java语言的语言扩展,具有自己的语法,专门用于通过面向方面的编程概念扩展Java运行时的功能。它包括一个编译器/编织器,可以在编译时或运行时运行。它们的相似之处在于它们都通过现有字节码的字节码操作和/或生成新的字节码来实现其目标。
ASM更通用,因为它没有关于如何修改现有字节码的意见,它只是为您提供了一个API,您可以随心所欲地使用它。另一方面,AspectJ更具体,范围更窄,它只支持一些预定义的AOP结构,但它为您提供了一个界面(aspectj语言),如果您可以在这些结构中使用它,则更容易使用它为您提供。
对于我见过的大多数用例,AspectJ绰绰有余,但在极少数情况下,ASM可能是一个不错的选择,但是你需要更多的编程努力取得类似的成果。