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.
- 1. Compilation Java Bytecode
- 2. Programmation en Java bytecode
- 3. Repères du compilateur Java bytecode
- 4. Java: nouvelle instance du bytecode
- 5. Instrumentation bytecode générant une erreur java verifier
- 6. Équivalents bytecode Java pour ilasm/ildasm
- 7. Quels langages JVM sont interprétés plutôt que compilés en bytecode?
- 8. lecture bytecode d'une AnnotationProcessor
- 9. Quelles sont les différences entre LLVM et java bytecode?
- 10. en cours d'exécution Jython bytecode en utilisant Java
- 11. Est-ce que jruby compile jusqu'au même bytecode qu'une application java? Peut-il être obscurci alors?
- 12. statique java bytecode optimiseur (comme proguard) avec l'analyse d'échappement?
- 13. dynamique bytecode exécution
- 14. Génération de bytecode Java avec les informations de signature génériques de reflect.Method
- 15. Comment désassembler le bytecode ABC?
- 16. ASM instrumentation bytecode pour l'entrée de la méthode/sortie
- 17. Propriété de chargement paresseux de NHibernate - que signifie l'instrumentation de bytecode en temps de construction?
- 18. Le bytecode Java est-il compatible avec différentes mises à jour de la même version de Java?
- 19. Obtenir java.lang.IllegalAccessError lors de l'accès au champ privé d'une classe externe via ASM Java Bytecode
- 20. exec() bytecode avec des locales arbitraires?
- 21. Quels sont les outils du bytecode CLR/.NET?
- 22. Comment compiler des fichiers rhino/javascript en .class bytecode pour java à l'exécution
- 23. Comment générer un bytecode dans Ruby 1.9?
- 24. Comment détecter la taille d'un tableau dans un bytecode Java (FindBugs)
- 25. Comment les langages/runtimes basés sur JVM génèrent-ils le bytecode Java?
- 26. Compilateur Python bytecode; supprime les variables inutiles?
- 27. Quelle bibliothèque/programme peut-il être utilisé pour générer le bytecode Java?
- 28. Manipulation de bytecode pour intercepter la valeur d'un champ
- 29. "Le fichier cma n'est pas un fichier objet bytecode" => Qu'est-ce que cela signifie?
- 30. Résoudre le nom de classe à partir du bytecode