Java - способен ли bytebuddy агент "полностью" переопределить класс?
Способен ли агент байтового партнера преодолевать ограничения API присоединения, например, "определение нового метода", "изменения статической переменной"? я могу увидеть это redefineClasses
Метод вызывается из Agent Builder, но не уверен, что он также соответствует тем же ограничениям, что и API присоединения.
Я пытаюсь понять, могу ли я сделать следующее:
1) Загрузите jar агента с помощью загрузчика классов приложения, например ParallelWebappClassLoader
, Мое приложение представляет собой веб-приложение сервлета, и во время выполнения оно использует вышеуказанный загрузчик классов для загрузки всех классов приложения.
2) Полностью переопределить мои классы, т. Е. Любые добавления / обновления методов и изменения / обновления / добавления статических / локальных переменных.
У меня есть агент, который в настоящее время работает в рамках ограничений Attach API, но я пытаюсь делегировать загрузку классов из System Class Loader приложению.
Большое спасибо,
1 ответ
Это ограничение виртуальной машины Java, на которой вы работаете. Byte Buddy способен "полностью переопределить" класс с помощью его API, но большинство виртуальных машин будут отклонять такие изменения. Взгляните на динамическую ВМ эволюции кода, чтобы иметь возможность применять такие изменения.