Переопределение класса времени выполнения с помощью ByteBuddy - PullRequest
0 голосов
/ 04 марта 2020

Я создал пользовательский файл на основе java.io.File, поэтому у меня есть:

class CloudFile extends java.io.File {}

Возможно ли с помощью ByteBuddy (во время выполнения) иметь возможность заменить все вызовы на класс java.io.File и маскарад это с новым CloudFile

Так, например, я создал приложение, которое использует библиотеку, которая широко использует java.io.File, что я хочу, это любой вызов этой библиотеки к классу File в моем приложении будет вызов CloudFile

Иначе, гораздо более вероятное решение - использовать ByteBuddy для создания загрузчика классов, который будет переопределять java.io.File - - и вопрос в том, как правильно это принять?

1 Ответ

1 голос
/ 05 марта 2020

Вы можете переопределить классы, используя Java агент, которого Byte Buddy позволяет строить с AgentBuilder. Затем вы можете дать ему команду переопределить весь код вашей библиотеки, где вы заменяете вызовы конструктора на File на ваши CloudFile, которые, как я предполагаю, имеют виртуальные переопределения для рассматриваемых методов.

Чтобы заменить конструктор, создайте преобразователь, который регистрирует MemberSubstitution там, где выключен конструктор.

...