Ich habe erfahren, dass Jmockit benutzerdefinierte Ladeprogramm nicht verwendet, um den statischen Aufruf zu verspotten, sondern stattdessen den Java-Agenten verwendet.Wie statische Aufrufe mit Java-Agent wie in jmockit verspottet werden?
Ich bin mir bewusst, es durch benutzerdefinierte Klassenlader zu tun. Kann jemand erklären, wie Java-Agent hier auf hoher Ebene hilft?
Ich glaube, dass Java-Agent den Anruf abfangen und Stub anstelle der ursprünglichen Implementierung aufrufen muss.
Aber wie hilft Java-Agent hier bei der Überwachung als in der Regel durch Proxy?
Sie First Class in Class-Loader ersetzt geladen (keine benutzerdefinierten Klassenlader), einmal geladen Java-Agent den Bytecode selbst in beladenem manipulieren Instanz richtig? Wenn ja, zu welchem Zeitpunkt manipuliert Java Agent die Klassendefinition? wenn gerade nach der Klasse geladen, wie Java-Agent erfahren, dass das Laden von Klassen für jede Klasse abgeschlossen ist? – emilly
Hast du überhaupt den Link gelesen, den ich dir oben gegeben habe? Der Agent registriert Transformatoren in der Instrumentierungsinstanz der agent-premain-Methode, und die JVM ruft dann diese Transformer auf, wenn eine Klasse geladen wird. Aber eigentlich denke ich, dass es JMockit nicht tut, da Sie JMockit ohne den Java-Agenten verwenden können. Der Agent führt nur eine Initialisierung durch, die Sie auf andere Weise durchführen können. – Vampire
Vielen Dank Bjorn – emilly