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
выполнит измененный метод, а не старый.
Мне было интересно, возможно ли это вообще или я что-то упускаю.
Большое спасибо заранее.