Heim > Java > javaLernprogramm > Class.getResource() vs. ClassLoader.getResource(): Was ist der Unterschied und wann sollte ich welche verwenden?

Class.getResource() vs. ClassLoader.getResource(): Was ist der Unterschied und wann sollte ich welche verwenden?

Mary-Kate Olsen
Freigeben: 2024-12-19 16:58:14
Original
658 Leute haben es durchsucht

Class.getResource() vs. ClassLoader.getResource(): What's the Difference and When Should I Use Which?

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage