Когда я пытаюсь найти примеры использования Javaagent, в большинстве случаев они являются примерами работы с байт-кодом. В этих примерах используются сторонние библиотеки, такие как Javaassist.Javaagent. Зачем?
Насколько я знаю, в Java нет стандартных средств для работы с байт-кодом, и в любом случае вам придется прибегать к библиотекам.
Итак, я попытался использовать эти библиотеки в своем собственном загрузчике классов перед вызовом defineClass()
. И, конечно же, это сработало отлично. Я мог бы изменить байт-код таким же образом, как если бы я сделал это с помощью метода ClassFileTransformer
transform()
.
Правильно ли я понимаю, что есть еще одна полезная функция javaagents, которая, в свою очередь, является их главной особенностью? Поскольку, прежде всего, javaagent дает вам объект Instrumentation
, а спецификация Java говорит, что пакет instrument
в основном используется для работы с байтовым кодом. Но зачем мне это делать, если я просто могу реализовать свой собственный загрузчик классов (что я мог бы сделать задолго до того, как был введен пакет instrument
)?
Не могли бы вы привести пример? –
http://www.javabeat.net/2012/06/introduction-to-java-agents/# – isnot2bad
Я смиренно сожалею, но все, что они сделали в статье, используется для преобразования байтового кода с ASM. То же самое можно сделать с помощью classloader –