#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: внедрение байт-кода