Eintauchen in die Unterschiede zwischen Class.getResource() und ClassLoader.getResource()
Der Unterschied zwischen Class.getResource() und ClassLoader .getResource() liegt in der Interpretation des Ressourcennamens.
Relativ vs. Absolute Ressourcennamen
Class.getResource() akzeptiert sowohl „relative“ als auch „absolute“ Ressourcennamen. Bei Verwendung eines relativen Namens wird die Ressource relativ zum Paket der Klasse interpretiert. Andererseits geht ClassLoader.getResource() immer von einem absoluten Pfad aus.
Zur Veranschaulichung:
foo.bar.Baz.class.getResource("xyz.txt"); // relative name foo.bar.Baz.class.getClassLoader().getResource("foo/bar/xyz.txt"); // equivalent
Leading Slash
In Im Kontext von Class.getResource() gilt ein Ressourcenname, dem ein führender Schrägstrich („/“) vorangestellt ist, als absolut. Dies soll dem erwarteten Verhalten beim Umgang mit echten Dateisystemen entsprechen.
foo.bar.Baz.class.getResource("/data/xyz.txt"); // absolute name foo.bar.Baz.class.getClassLoader().getResource("data/xyz.txt"); // also absolute
Caching:
Was Ihre Frage zum Caching betrifft, haben Sie mit Ihrer Beobachtung Recht . Verzeichnislisten werden vom ClassLoader zwischengespeichert, nicht jedoch von Class.getResource(). Dies kann zu Szenarien führen, in denen neu erstellte Dateien oder Verzeichnisänderungen möglicherweise nicht sofort mit Class.getResource() widergespiegelt werden, aber über ClassLoader.getResource() sichtbar wären.
Die API-Dokumentation für Class.getResource() bestätigt dies dieses Verhalten:
"Diese Methode delegiert an den Klassenlader dieses Objekts. Wenn dieses Objekt vom Bootstrap-Klassenlader geladen wurde, delegiert die Methode an ClassLoader.getSystemResource(java.lang.String)."
Empfehlung
Im Allgemeinen wird die Verwendung von ClassLoader.getResource() empfohlen, wenn Sie auf Ressourcen zugreifen müssen, die darf sich nicht im Paket der Klasse befinden. Wenn Sie jedoch speziell mit Ressourcen relativ zum Klassenpaket arbeiten und Verzeichnisänderungen sofort widerspiegeln möchten, können Sie Class.getResource() verwenden und dabei die Caching-Einschränkungen berücksichtigen.
Das obige ist der detaillierte Inhalt vonClass.getResource() vs. ClassLoader.getResource(): Was ist der Unterschied und wann sollte ich welche verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!