什么是Java字节码注入?

时间:2010-08-12 18:49:33

标签: java bytecode

Java字节码注入究竟是什么以及为什么要使用它?

3 个答案:

答案 0 :(得分:25)

Java代码编译为字节码(Foo.java ->> Foo.class)。字节码注入在运行时修改Foo.class,以便在加载和运行之前将代码注入其中。

想象一下我想知道方法

多少次的情景
public void bar();

Foo.class中调用。我可以使用java.lang.instrument编写代理,在类加载期间拦截Foo.class,使用ASM对其进行修改,以便bar()在方法条目上调用com.amir.agent.incrementCount()

现在我可以运行我的程序了:

$java -javagent:MyAgent Foo  //assuming Foo has a main() defined

并且在运行时,Foo.class不仅会正常工作,还会在每次调用MyAgent时执行我在bar()中定义的工作。

有关从头开始编写代理的指针,请启动here

答案 1 :(得分:3)

首次谷歌搜索提供了一个有趣的阅读Java Programming: Bytecode Injection

答案 2 :(得分:1)

解决问题的第二部分。我使用它,因为我很懒,不想花一半的(工作)生活写出吸气剂和制定者。相反,我在我的类定义之前放了一个注释@Data,一切都完成了。

请参阅Project Lombok上的3分钟视频演示。