2015-08-18 3 views
0

Можете ли вы сказать мне, если это возможно сценарий с байт-приятелю:Bytebuddy - класс переопределение во время выполнения

  1. программа Java запускается.
  2. Загружаются стандартные классы POJO java с множеством свойств.
  3. ByteBuddy - во время выполнения изменяет каждый класс, заменяя типы свойств, например. int и Integer с MyInteger. MyInteger, чтобы перехватить настройку этих свойств. Я не хочу использовать сеттеры, так как необязательно иметь сеттеры для всех свойств.
  4. Каждое обращение к SomeClass.setSomeInt(1) вызовет метод, определенный в MyInteger.
  5. Удалить все свойства назад к оригиналу MyInteger ->int и MyInteger ->Integer.

В основном, прокси-серверы непосредственно на недвижимость.

ответ

0

Невозможно использовать Byte Buddy (или любую библиотеку генерации высокоуровневого кода, о которой я знаю). Byte Buddy предназначен для двоично-совместимых изменений. Если вы изменили тип поля, вам нужно будет изменить весь код, который обращается к этому полю. Для этого потребуется изменение глобального кода из-за изменения API класса по сравнению с изменением частной реализации класса.

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

0

Не должно быть много полей, которые вам нужно изменить во время выполнения, и если это так, я бы предложил хранилище базы данных с помощью exec updater. Затем вы можете изменить базу данных через любой понравившийся вам интерфейс, и когда класс опроса повторится, он будет захватывать материал из базы данных и выполнять все ваши настройки для вас.

Это должно выполняться с помощью любого инжектора кода или java-агента BUUUT, это было бы неправильно. Также стоит вам много накладных расходов, чтобы добиться лучших результатов.

+0

Чтобы уточнить точку зрения Рафаэля, я думаю, что ByteBuddy работает быстрее, и он многое делает лучше. Однако это довольно просто для достижения с помощью javassist, вы должны изучить его hookmanager – Xype

Смежные вопросы