2010-08-12 7 views

Respuesta

25

código Java se compila en código de bytes (Foo.java ->> Foo.class). La inyección de Bytecode está modificando Foo.class en tiempo de ejecución para inyectar código justo antes de cargarse y ejecutarse.

imaginar un escenario en el que yo quiero averiguar cuántas veces método

public void bar(); 

se invoca en Foo.class. Podría escribir un agente usando java.lang.instrument que intercepta Foo.class durante la carga de la clase, lo modifica usando ASM para que bar() llame a en la entrada del método.

Ahora puedo correr mi programa:

$java -javagent:MyAgent Foo //assuming Foo has a main() defined 

y en tiempo de ejecución, Foo.class no sólo hacer su trabajo normal, se hará también trabajar he definido en MyAgent cada vez que se invoca bar().

Para obtener un puntero al escribir un agente desde cero, inicie here.

1

Para abordar la segunda parte de su pregunta. Lo uso porque soy perezoso y no quiero gastar la mitad de mi vida (laboral) escribiendo getters y setters. En su lugar, puse una anotación @Data antes de la definición de mi clase y todo está hecho.

Vea la demostración de video de 3 minutos en Project Lombok.

Cuestiones relacionadas