Манипуляции с байт-кодом для перехвата установки значения поля

Используя такую ​​библиотеку, как ASM или cglib , есть ли способ добавить инструкции байт-кода в класс для выполнения кода всякий раз, когда устанавливается значение поля класса?

Например, допустим, у меня есть этот класс:


   public class Person
   {  
       bool dirty;
       public String name;
       public Date birthDate;
       public double salary;
   }

Допустим, часть кода содержит эту строку:

person.name = "

Я хочу, чтобы эта инструкция была перехвачена, чтобы флаг dirty был установлен на true . Я знаю, что это возможно для методов установки - person.setName («Joe») - поскольку методы класса можно изменять с помощью манипуляций с байт-кодом, но я хочу сделать то же самое для поля .

Возможно ли это, и если да, как ?

ИЗМЕНИТЬ

Я хочу избежать изменения раздела кода, который обращается к классу, я ищу способ сохранить код перехвата как часть класса Person . Существуют ли псевдометоды для доступа к полям, аналогичные свойствам в классах Python?

5
задан Tony the Pony 16 November 2010 в 19:57
поделиться