java.lang.instrument 对比 AspectJ

java.lang.instrument vs AspectJ

对于 Java 中的检测,为什么 java.lang.instrument 比 AspectJ 更受青睐,尽管两者在检测工作中的作用相同。使用 java.lang.instrument 有什么特别的优势吗?提前致谢...

这是两个完全不同的东西。 Instrumentation API 提供了一个 JVM 运行时挂钩,允许 Java 代理访问 JVM 的更多高级功能。它还提供了一个 JVM 的 class 加载挂钩,当 class 加载并重新定义其 class 文件时,可以通知代理。类似地,可以 redefine/retransform 已经加载 classes.

AspectJ 是一个库,它提供了关于重新定义现有 classses 的更高级别的视图。它使用切点和连接点来解释 class 应该如何重新定义。然后,AspectJ 的重新定义要么在编译时借助 Maven 等工具应用,要么 AspectJ 可以使用 Java agebt 和工具 API 来应用 classes 的重新定义在运行时。

AspectJ is AOP implementation with byte-code manipulation it's better to compare AOP framewors. E.g. AspectJ vs Spring AOPjava.lang.instrument 不是 AOP 框架。