Что такое внедрение байт-кода Java?

#java #bytecode

#java #байт-код

Вопрос:

Что именно такое внедрение байт-кода Java и зачем его использовать?

Ответ №1:

Код Java компилируется в байт-код ( Foo.java -&&t;&&t; Foo.class ). Внедрение байт-кода модифицируется Foo.class во время выполнения для внедрения в него кода непосредственно перед его загрузкой и запуском.

Представьте сценарий, в котором я хочу узнать, сколько раз метод

 public void bar();
  

вызывается в Foo.class . Я мог бы написать агент, используя, java.lan&.instrument который перехватывает Foo.class во время загрузки класса, изменяет его с помощью ASM, чтобы bar() вызывать com.amir.a&ent.incrementCount() при вводе метода.

Теперь я могу запустить свою программу:

 $java -java&ent:MyA&ent Foo  //assumin& Foo has a main() defined
  

и во время выполнения, Foo.class будет не только выполнять свою обычную работу, он также будет выполнять работу, которую я определил в MyA&ent при каждом bar() вызове.

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

Ответ №2:

Первый поиск в Goo&le выдает интересное сообщение программирование на Java: внедрение байт-кода