Java: возможно ли выполнить модифицированный код метода (измененный во время выполнения), используя его существующие вызовы

Я получил много похожих вопросов по SO, но все еще пытался выяснить, можем ли мы заменить тело метода во время выполнения и может ли этот модифицированный метод быть выполнен существующими вызовами этого метода.

Прочитав много ответов на похожие вопросы, я узнал, что мы можем заменить любой пользовательский класс во время выполнения. Затем мы можем загрузить измененный класс (например, в измененном классе есть модифицированный метод), создать экземпляр этого класса и вызвать модифицированный метод. Принятый ответ на этот вопрос очень помог мне понять концепцию.

В основном пример, используемый в этом ответе, объясняет, что если мы изменим Test1.hello(), что будет выбрано main метод в Test класс, так как он создает новый экземпляр Test1 класс и вызывая привет через этот экземпляр.

Class cls = new TestClassLoader().loadClass("test.Test1");
Object obj = cls.newInstance();
cls.getMethod("hello").invoke(obj);

Но могут быть ситуации, когда существует много hello() в кодовой базе (например, в Test2.java), и мы хотим, чтобы после загрузки Test1 Класс динамически, все существующие вызовы в Test2 выполнит измененный метод, а не старый.

Мне было интересно, возможно ли это вообще или я что-то упускаю.

Большое спасибо заранее.

0 ответов

Другие вопросы по тегам