Использование JRebel для замены байт-кода класса - PullRequest
2 голосов
/ 10 июля 2011

Как уже говорилось, я хотел бы изменить байт-код во время выполнения. Я не использую какое-либо приложение или веб-сервер, это просто программа для командной строки.

Конечно, я мог бы просто создать новый ClassLoader, но это невозможно с точки зрения производительности.

Я столкнулся с JRebel, который должен быть способен именно на это, но я не могу найти никаких примеров, учебник для архивирования этого.

Java Hotswap не вариант, потому что он не может работать с несколькими загрузчиками классов

Простой пример демонстрации того, что я хочу:

Class Car
{
   public void print() { System.out.println("I am Type A"); }
} 

Сначала я хочу загрузить класс Car:

Car myCar = new Car();

Делай что-нибудь

myCar.print();  // => I am Type A

Изменить исходный код

sourceCode.replace("Type A", "Type b");

Перекомпилируйте и измените байт-код в том же загрузчике классов

Выполнить тот же класс снова

myCar.print(); // => I am Type B

Надеюсь, я ясно изложил свою точку зрения.

1 Ответ

1 голос
/ 11 июля 2011

JRebel заменяет байты за вас после перекомпиляции, вам не нужно вызывать API для этого.

...