Что байт-код Java является инжекцией?

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

24
задан Marcus Leon 12 August 2010 в 18:49
поделиться

3 ответа

Код Java компилируется в байт-код ( Foo.java - >> Foo.class ). Внедрение байт-кода модифицирует 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 каждый time bar () вызывается.

Чтобы узнать о написании агента с нуля, начните с здесь .

28
ответ дан 28 November 2019 в 23:59
поделиться

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

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

1
ответ дан 28 November 2019 в 23:59
поделиться

Первый поиск в Google дает интересное чтение Java Programming: Bytecode Injection

3
ответ дан 28 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: