【问题标题】:multiple java agent proxy the same class多个java代理代理同一个类
【发布时间】:2021-03-08 01:35:27
【问题描述】:

如果我使用一系列 java 代理来为同一个类进行字节码增强。后者的输入会是前者的输出吗?例如,Agent A 给方法 M 添加了两个局部变量,Agent B 的输入会包含方法 M 中相同的两个局部变量?

【问题讨论】:

标签: javaagents


【解决方案1】:

是的,如果代理 B 的转换器将在代理 A 的转换之后被调用:

当有多个转换器时,转换由链接transform 调用组成。也就是说,一次调用transform 返回的字节数组将成为下一次调用的输入(通过classfileBuffer 参数)。

(Source)

转换器的调用顺序也在此处指定:

转换按以下顺序应用:

  • 无法再转换的变压器
  • 无法再转换的原生转换器
  • 能够重新转换的变压器
  • 能够重新转换的原生转换器

对于重转换,不调用不能重转换的转换器,而是重用之前转换的结果。在所有其他情况下,都会调用此方法。 在这些分组中,转换器按注册顺序调用。本机转换器由 Java 虚拟机工具接口中的 ClassFileLoadHook 事件提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2014-04-25
    • 2017-05-05
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多