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> <div class="code" style="position:relative; padding:0px; margin:0px;"><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!