Когда я пытаюсь найти примеры использования Javaagent, в большинстве случаев это примеры работы с байт-кодом. В этих примерах используются сторонние библиотеки, такие как Javaassist.
Насколько я знаю, в Java нет стандартных средств для работы с байт-кодом и в любом случае придется прибегать к библиотекам.
Итак, я попытался использовать эти библиотеки в своем собственном загрузчике классов перед вызовом defineClass()
. И, конечно же, это сработало на отлично. Я мог бы изменить байт-код таким же образом, как если бы я сделал это с помощью метода ClassFileTransformer
transform()
.
Правильно ли я понимаю, что есть еще одна полезная функция javaagents, которая, в свою очередь, является их основной функцией? Потому что, во-первых, javaagent дает вам объект Instrumentation
, а спецификация Java говорит, что пакет instrument
в основном используется для работы с байт-кодом. Но зачем мне это делать, если я просто могу реализовать свой собственный загрузчик классов (то, что я мог сделать задолго до появления пакета instrument
)?