Что такое инъекция байт-кода Java и почему ее можно использовать?
Что такое Java-байт-код?
Ответ 1
Java-код компилируется в байт-код (Foo.java ->> Foo.class). Инъекция Bytecode модифицирует 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().
Для указателя на запись агента с нуля запустите здесь.
Ответ 2
Первый поиск в google дает интересное чтение Программирование на Java: Bytecode Injection
Ответ 3
Чтобы решить вторую часть вашего вопроса. Я использую его с тех пор, как я ленив и не хочу, чтобы потратить половину моей (рабочей) жизни на создание геттеров и сеттеров. Вместо этого я добавляю аннотацию @Data до определения моего класса, и все делается.
Смотрите демонстрацию видео в течение 3 минут на Project Lombok.