Как уже говорилось, я хотел бы изменить байт-код во время выполнения.
Я не использую какое-либо приложение или веб-сервер, это просто программа для командной строки.
Конечно, я мог бы просто создать новый 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
Надеюсь, я ясно изложил свою точку зрения.