What exactly is Java bytecode injection and why would one use it?
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
First google search gives an interesting read Java Programming: Bytecode Injection
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.
Java code compiles into bytecode (
Foo.java ->> Foo.class
). Bytecode injection is modifyingFoo.class
at 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
is invoked in
Foo.class
. I could write an agent usingjava.lang.instrument
that interceptsFoo.class
during class load, modifies it using ASM so thatbar()
callscom.amir.agent.incrementCount()
on method entry.Now I can run my program:
and at runtime,
Foo.class
will not only do its normal work, it will also do work I defined inMyAgent
each timebar()
is invoked.For a pointer on writing an agent from scratch, start here.