Heim >Java >javaLernprogramm >Wie kann ich Classpath-Ressourcen mithilfe eines benutzerdefinierten URL-Protokolls laden?

Wie kann ich Classpath-Ressourcen mithilfe eines benutzerdefinierten URL-Protokolls laden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-26 07:42:12810Durchsuche

How Can I Load Classpath Resources Using a Custom URL Protocol?

Verwenden des Classpath-Protokolls zum Laden von Ressourcen

Problemstellung:

Laden von Ressourcen aus dem Klassenpfad Verwendung eines URL-Protokolls, das keine Angabe der spezifischen JAR-Datei oder -Klasse erfordert Ordner.

Lösung:

Implementieren eines URL-Stream-Handlers:

So erstellen Sie ein Protokoll, das Ressourcen aus dem Klassenpfad lädt , implementieren Sie einen benutzerdefinierten URLStreamHandler. Dieser Handler öffnet Verbindungen zu URLs mithilfe des „classpath“-Protokolls.

<br>Der öffentliche Klassenhandler erweitert URLStreamHandler {</p>
<pre class="brush:php;toolbar:false">private final ClassLoader classLoader;

public Handler(ClassLoader classLoader) {
    this.classLoader = classLoader;
}

@Override
protected URLConnection openConnection(URL u) throws IOException {
    final URL resourceUrl = classLoader.getResource(u.getPath());
    return resourceUrl.openConnection();
}

}

Verwendung:

Verwenden Sie den benutzerdefinierten Handler, um das Klassenpfadprotokoll im anzugeben URL beim Laden von Ressourcen.

<br>neu URL("classpath:org/my/package/resource.extension").openConnection();<br>

Umgang mit Startproblemen:

Manuelle Code-Handler-Spezifikation:

Wenn möglich, geben Sie den benutzerdefinierten Handler beim Erstellen manuell an URL.

<br>neue URL(null, "classpath:some/package/resource.extension", new org.my.protocols.classpath.Handler(ClassLoader.getSystemClassLoader())) <br>

JVM-Handler Registrierung:

Registrieren Sie eine URLStreamHandlerFactory bei der JVM, um alle URLs mithilfe des Classpath-Protokolls zu verarbeiten.

<br>URL.setURLStreamHandlerFactory(new ConfigurableStreamHandlerFactory("classpath", neu Handler(ClassLoader.getSystemClassLoader())));<br>

Vorsichtsmaßnahme:

JVM-Handler-Registrierung kann nur einmal pro JVM aufgerufen werden, Seien Sie daher vorsichtig, wenn Sie es in Umgebungen verwenden, in denen es zu Konflikten zwischen mehreren Handlern kommen kann.

Das obige ist der detaillierte Inhalt vonWie kann ich Classpath-Ressourcen mithilfe eines benutzerdefinierten URL-Protokolls laden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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