Ami*_*ani 28
Java代码编译成bytecode(Foo.java ->> Foo.class).字节码注入Foo.class在运行时进行修改,以便在加载和运行之前将代码注入其中.
想象一下我想知道多少次方法的场景
public void bar();
Run Code Online (Sandbox Code Playgroud)
被调用Foo.class.我可以在类加载期间使用java.lang.instrument截取来编写代理Foo.class,使用ASM修改它以便bar()调用com.amir.agent.incrementCount()方法入口.
现在我可以运行我的程序:
$java -javagent:MyAgent Foo //assuming Foo has a main() defined
Run Code Online (Sandbox Code Playgroud)
并且在运行时,Foo.class它不仅会执行其正常工作,还会执行我在MyAgent每次bar()调用时定义的工作.
有关从头开始编写代理的指针,请从此处开始.
| 归档时间: |
|
| 查看次数: |
12540 次 |
| 最近记录: |