Was lädt den Java System Classloader?
Wir wissen, dass wir überschreiben das System classloader mit:
java -Djava.system.class.loader=com.test.MyClassLoader xxx
Dann, da com.test.MyClassLoader
selbst ist eine Klasse, von wem ist es geladen?
Wie bekommen wir die Klasse Datei von dieser "meta" - classloader gemeint?
Kommentar zu dem Problem
Bootstrap laden selbst und andere - javabench.in/2012/02/java-class-loading.html
"Amüsant" edge-Fall: Unter einem benutzerdefinierten system
ClassLoader
, MySysCl
, die nicht delegieren laden von Anwendungs-classpath classes übergeordneten, MySysCl.Klasse.getClassLoader().getClass().equals(ClassLoader.getSystemClassLoader().getClass()) == true
. 🙂 InformationsquelleAutor der Frage James.Xu | 2012-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Javadoc für
ClassLoader.getSystemClassLoader
:Standard-system-class-loader selbst ist spezifisch auf die JVM-Implementierung.
InformationsquelleAutor der Antwort casablanca
Bootstrap classloader
ist die Muttergesellschaft allerclassloaders
und lädt die standard-JDK-Klassen im lib-Verzeichnis von JRE (rt.jar und i18n.jar). Alle java.* Klassen geladen werden, die von diesemclassloader
.Extensions Classloader
ist die sofortige Kind der Bootstrap-classloader. Dieser classloader lädt Klassen, die in lib\ext-Verzeichnis der JRE.System-Classpath classloader
ist die sofortige Kind Extensions classloader. Er lädt die Klassen und jar-Dateien angegeben, die durch dieCLASSPATH
UmgebungsvariableKönnten Sie versuchen, zu injizieren Ihre benutzerdefinierten class loader mit Hilfe von "java.system.Klasse.loader" - Eigenschaft (siehe ClassLoader#getSystemClassLoader).
Default System class loader
ist Eltern für MyClassLoader Instanzen,InformationsquelleAutor der Antwort amicngh
Tldr:
..Also, wenn Ihr classloader ersetzt X als system-class-loader, dann ist dein classloader parent wird X, die Standard-system-class-loader.
(X ist ein Typ wie
Sonne.misc.Launcher$AppClassLoader
.)Weitere Infos finden Sie unter docs.oracle.com - Wie sich die Java-Launcher-Findet Klassen:
Tsmr:
Können wir beweisen, dass X ist wirklich der Vater unseres
Classloader
:Dies ist unsere Haupt-code:
Dies ist die Ausgabe (auf meinem system) beim ausführen mit dem Befehl
java -Djava.system.class.loader=MyCL Main
(vgl. Eclipse-config ausführen):Können wir sehen, dass
MyCL
's classloader istSonne.misc.Launcher$AppClassLoader
, das ist die Standard-system-classloader.(Pro Sprache wie in Oracle anderen Zitat oben, die Standard-system-classloader auch genannt wird, wird der classloader "Benutzer-Klassen". Schraube Oracle für die kommenden up mit 2 Namen für die gleiche Sache.)
InformationsquelleAutor der Antwort Pacerier