【发布时间】:2016-12-27 03:13:04
【问题描述】:
据我了解,这两个框架都是静态的,将监控代码注入到类代码中。那么,有什么区别呢?
【问题讨论】:
标签: hook aspectj inject java-bytecode-asm
据我了解,这两个框架都是静态的,将监控代码注入到类代码中。那么,有什么区别呢?
【问题讨论】:
标签: hook aspectj inject java-bytecode-asm
ASM 是一个框架/库,它为您提供 API 来操作现有字节码和/或轻松生成新字节码。
另一方面,AspectJ 是 Java 语言之上的一种语言扩展,具有自己的语法,专门设计用于使用面向方面的编程概念扩展 Java 运行时的功能。它包括一个编译器/编织器,可以在编译时或运行时运行。
它们在某种意义上是相似的,都通过对现有字节码的字节码操作和/或生成新字节码来实现其目标。
ASM 更通用,因为它对如何修改现有字节码没有意见,它只是给你一个 API,你可以用它做任何你想做的事情。另一方面,AspectJ 更具体,范围更窄,它只支持一些预定义的 AOP 构造,但它为您提供了一个接口(aspectj 语言),如果您可以适应这些构造,它会更容易使用为您提供。
对于我见过的大多数用例,AspectJ 绰绰有余,但在极少数情况下,ASM 可能是一个不错的选择,但您需要更多的编程工作才能获得类似的结果。
【讨论】: