Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java字节码注入_Java_Code Injection - Fatal编程技术网

Java字节码注入

Java字节码注入,java,code-injection,Java,Code Injection,我正试图把我的脑袋绕在这个概念上。我的问题是: 从性能的角度来看,此操作成本高吗?如果是,原因是什么 如果我试图通过在方法被调用后注入一些代码来截获传递给该方法的一些参数,那么这种注入是发生一次还是每次调用该方法时都发生 这个注入代码驻留在哪里?在应用程序源本身还是其他地方 您可以使用Java代理实现字节码注入 java代理是一个库,它在类加载器处拦截字节码加载,并在将其加载到JVM之前对其进行增强。当然,这样的库通常依赖于字节码操作库,如Javassist、ASM或CGLib。 因此,当类被加

我正试图把我的脑袋绕在这个概念上。我的问题是:

  • 从性能的角度来看,此操作成本高吗?如果是,原因是什么
  • 如果我试图通过在方法被调用后注入一些代码来截获传递给该方法的一些参数,那么这种注入是发生一次还是每次调用该方法时都发生
  • 这个注入代码驻留在哪里?在应用程序源本身还是其他地方

  • 您可以使用Java代理实现字节码注入

    java代理是一个库,它在类加载器处拦截字节码加载,并在将其加载到JVM之前对其进行增强。当然,这样的库通常依赖于字节码操作库,如Javassist、ASM或CGLib。 因此,当类被加载时,字节码操作只执行一次

    见官方Javadoc:

    本文介绍了如何做您想做的事情:

    此外,如果您真的对字节码基础知识感兴趣,这篇来自JRebel开发人员之一的文章应该会让您感到高兴:

    最后,你可以看看Seren,一个我刚刚开始写作的图书馆。它是增强可序列化类的Java代理。这只是一个开始,但很有效。

    谢谢你的回答,但你仍然没有回答这三个问题。对不起,这里有更多的解释。1:没有性能损失,这是纯字节码(没有代理)。2:它只在类加载时发生一次,请参见上文。3:代理代码位于必须在命令行上提供的jar中(-javaagent vm参数);生成的代码与剩余的“普通”代码一起存在于堆的PermGen空间中。