Manipulação de bytecode para interceptar a configuração do valor de um campo
Usando uma biblioteca comoASM
oucglib
, existe uma maneira de adicionar instruções de bytecode a uma classe para executar código sempre que o valor de um campo de classe for definido?
Por exemplo, digamos que eu tenho essa classe:
public class Person
{
bool dirty;
public String name;
public Date birthDate;
public double salary;
}
Digamos que uma seção de código contenha esta linha:
person.name = "Joe";
Eu quero que esta instrução seja interceptada para que odirty
sinalizador está definido comotrue
. Eu sei que isso é possível para métodos setter -person.setName (“Joe”)
- como os métodos de classe podem ser modificados pela manipulação do bytecode, mas quero fazer o mesmo por umcampo.
Isso é possível? Se sim,quão?
EDITAR
Quero evitar modificar a seção de código que acessa a classe. Estou procurando uma maneira de manter o código de interceptação como parte doPerson
classe. Existem pseudo-métodos para acesso ao campo, semelhantes às propriedades nas classes Python?