Qu'est-ce que l'injection de bytecode Java et pourquoi l'utiliser?Qu'est-ce que l'injection de bytecode Java?
Répondre
code Java compile en bytecode (Foo.java ->> Foo.class
). L'injection de bytecode est en train de modifier Foo.class
lors de l'exécution pour y injecter du code juste avant son chargement et son exécution.
Imaginez un scénario où je veux savoir comment la méthode de fois
public void bar();
est invoquée dans Foo.class
. Je pourrais écrire un agent en utilisant java.lang.instrument
qui intercepte Foo.class
pendant le chargement de classe, le modifie en utilisant ASM de sorte que bar()
appelle com.amir.agent.incrementCount()
sur l'entrée de la méthode.
Maintenant, je peux courir mon programme:
$java -javagent:MyAgent Foo //assuming Foo has a main() defined
et à l'exécution, Foo.class
sera non seulement son travail normal, il sera également ne fonctionnent que je définis en MyAgent
chaque fois bar()
est invoquée.
Pour un pointeur sur l'écriture d'un agent à partir de zéro, commencez here.
recherche First google donne une lecture intéressante Java Programming: Bytecode Injection
Pour répondre à la deuxième partie de votre question. Je l'utilise depuis que je suis paresseux et que je ne veux pas passer la moitié de ma vie (de travail) à écrire des getters et setters. Au lieu de cela, j'ai mis une annotation @Data avant la définition de ma classe et tout est fait.
Voir la démonstration vidéo de 3 minutes au Project Lombok.