Подтвердить что ты не робот

Что такое Java-байт-код?

Что такое инъекция байт-кода Java и почему ее можно использовать?

4b9b3361

Ответ 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().

Для указателя на запись агента с нуля запустите здесь.

Ответ 3

Чтобы решить вторую часть вашего вопроса. Я использую его с тех пор, как я ленив и не хочу, чтобы потратить половину моей (рабочей) жизни на создание геттеров и сеттеров. Вместо этого я добавляю аннотацию @Data до определения моего класса, и все делается.

Смотрите демонстрацию видео в течение 3 минут на Project Lombok.