如何通过设置 Instrumentation 的 nativeMethodPrefix 来进行本地方法 AOP 阻截?

2026-04-30 16:500阅读0评论SEO教程
  • 内容介绍
  • 相关推荐

本文共计870个文字,预计阅读时间需要4分钟。

如何通过设置 Instrumentation 的 nativeMethodPrefix 来进行本地方法 AOP 阻截?

不能。这是最常被误解的一点:

你如果在 Java Agent 中设置了 instrumentation.setNativeMethodPrefix(transformer, "prefix_"),却期待 prefix_JNI_OnLoad 被自动调用或原生函数被代理——那不会发生。JVM 只会在加载 native 库时,尝试按带前缀的符号名去查找函数(比如把 Java_com_example_Foo_bar 改查 prefix_Java_com_example_Foo_bar),仅此而已。

为什么 setNativeMethodPrefix 会被误认为能做 AOP?

因为文档模糊 + 示例缺失 + 与 JVMTI 的 SetNativeMethodPrefix 同名,导致开发者以为它和 Java Agent 的字节码增强能力打通了。

阅读全文

本文共计870个文字,预计阅读时间需要4分钟。

如何通过设置 Instrumentation 的 nativeMethodPrefix 来进行本地方法 AOP 阻截?

不能。这是最常被误解的一点:

你如果在 Java Agent 中设置了 instrumentation.setNativeMethodPrefix(transformer, "prefix_"),却期待 prefix_JNI_OnLoad 被自动调用或原生函数被代理——那不会发生。JVM 只会在加载 native 库时,尝试按带前缀的符号名去查找函数(比如把 Java_com_example_Foo_bar 改查 prefix_Java_com_example_Foo_bar),仅此而已。

为什么 setNativeMethodPrefix 会被误认为能做 AOP?

因为文档模糊 + 示例缺失 + 与 JVMTI 的 SetNativeMethodPrefix 同名,导致开发者以为它和 Java Agent 的字节码增强能力打通了。

阅读全文