Есть ли способ добавить инструкции байт-кода в класс, используя библиотеку, такую как ASM
или cglib
, для выполнения кода всякий раз, когда установлено значение поля класса?
Например, предположим, что у меня есть этот класс:
public class Person
{
bool dirty;
public String name;
public Date birthDate;
public double salary;
}
Допустим, часть кода содержит эту строку:
person.name = "Joe";
Я хочу, чтобы эта инструкция была перехвачена, поэтому для флага dirty
установлено значение true
. Я знаю, что это возможно для методов установки -- person.setName (“Joe”)
-- поскольку методы класса могут быть изменены с помощью манипуляций с байт-кодом, но я хочу сделать то же самое для поля.
Возможно ли это, и если да, то как?
ИЗМЕНИТЬ
Я хочу избежать изменения раздела кода, который обращается к классу, я ищу способ сохранить код перехвата как часть класса Person
. Существуют ли псевдометоды для доступа к полям, подобные свойствам в классах Python?