What is Java bytecode injection?

前端 未结 3 740
再見小時候
再見小時候 2020-12-16 10:49

What exactly is Java bytecode injection and why would one use it?

相关标签:
3条回答
  • 2020-12-16 11:29

    First google search gives an interesting read Java Programming: Bytecode Injection

    0 讨论(0)
  • 2020-12-16 11:40

    Java code compiles into bytecode (Foo.java ->> Foo.class). Bytecode injection is modifying Foo.classat runtime to inject code into it right before its loaded and run.

    Imagine a scenario where I want to find out how many times method

    public void bar();
    

    is invoked in Foo.class. I could write an agent using java.lang.instrument that intercepts Foo.class during class load, modifies it using ASM so that bar() calls com.amir.agent.incrementCount() on method entry.

    Now I can run my program:

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

    and at runtime, Foo.class will not only do its normal work, it will also do work I defined in MyAgent each time bar() is invoked.

    For a pointer on writing an agent from scratch, start here.

    0 讨论(0)
  • 2020-12-16 11:46

    To address the second part of your question. I use it since I'm lazy and don't want the to spend half of my (working) life writing getters and setters. Instead I put an annotation @Data before my class definition and everything is done.

    See the 3 minutes video demonstration on Project Lombok.

    0 讨论(0)
提交回复
热议问题