Was genau ist Java-Bytecode-Injektion und warum sollte man es verwenden?Was ist Java-Bytecode-Injektion?
Antwort
Java-Code in Bytecode kompiliert (Foo.java ->> Foo.class
). Die Bytecode-Injektion modifiziert zur Laufzeit Foo.class
, um Code direkt vor dem Laden und Ausführen in den Code einzufügen.
ein Szenario vorstellen, wo ich wie oft Methode
inFoo.class
public void bar();
wird aufgerufen, um herauszufinden möchten. Ich könnte einen Agenten mit java.lang.instrument
schreiben, der während des Ladens der Klasse Foo.class
abfängt, ändert es unter Verwendung ASM, so dass bar()
Aufrufe com.amir.agent.incrementCount()
auf Methodeneintrag.
Jetzt kann ich mein Programm laufen:
$java -javagent:MyAgent Foo //assuming Foo has a main() defined
und zur Laufzeit, Foo.class
wird nicht nur seine normale Arbeit, es wird auch ich in MyAgent
jedes Mal definiert funktionieren bar()
aufgerufen wird.
Starten Sie here für einen Zeiger zum Schreiben eines Agenten von Grund auf neu.
Erste Google-Suche gibt eine interessante Java Programming: Bytecode Injection lesen
Um den zweiten Teil Ihrer Frage zu adressieren. Ich benutze es, weil ich faul bin und nicht die Hälfte meines (Arbeits-) Lebens verbringen will, um Getter und Setter zu schreiben. Stattdessen lege ich eine Annotation @Data vor meine Klassendefinition und alles ist erledigt.
Sehen Sie die 3 Minuten Video-Demonstration auf Project Lombok.
- 1. Was ist JAF? Was ist seine Aufgabe?
- 2. Was ist
- 3. Was ist HTML "ist" Attribut?
- 4. Was ist 'das' ist Javascript
- 5. Was ist für Python was "explodieren" ist für PHP?
- 6. Was ist und was ist die Verwendung der Closure „Richtlinie“
- 7. (iOS) Was ist Superview und was ist Subviews
- 8. Was ist ein DTO und BO? Was ist der Unterschied?
- 9. Was ist xcscheme Datei? Was ist das Ziel?
- 10. Was ist ein PHP-Framework und was ist ein guter?
- 11. Was ist Blend? und was ist seine Beziehung zu WPF?
- 12. Google AMP: Was ist ein Layout? Was ist ein Behälter?
- 13. Was ist eine native Bibliothek? Was ist bindend?
- 14. Was ist das? Template-Methode oder was?
- 15. Was ist Thread.CurrentPrincipal und was macht es?
- 16. Was ist ((Fenster) => {...}) (Fenster); was bedeutet,
- 17. Was ist JSR und was nutzt es?
- 18. Was sind Threads (Was ist ein Thread)?
- 19. Was ist Boxen und was macht es?
- 20. Was ist POI und was bedeutet es?
- 21. Was ist SSO
- 22. _NSZombie_NSKeyValueUndefiniertGetter - Was ist das?
- 23. Was ist Klass & KlassKlass
- 24. Was ist Frühling Roo?
- 25. Was ist ein Protokoll?
- 26. Was ist idr_alloc()
- 27. Was ist Absender?
- 28. Was ist eine textViewResourceId?
- 29. Was ist P99 Latenz?
- 30. Was ist kontinuierliche Integration?