Maison >Java >javaDidacticiel >Comment puis-je charger des ressources Classpath à l'aide d'un protocole URL personnalisé ?
Utilisation du protocole Classpath pour charger des ressources
Énoncé du problème :
Chargement de ressources à partir du chemin de classe en utilisant un protocole URL qui ne nécessite pas de spécifier le fichier ou la classe JAR spécifique dossier.
Solution :
Implémentation d'un gestionnaire de flux d'URL :
Pour créer un protocole qui charge les ressources à partir du chemin de classe , implémentez un URLStreamHandler personnalisé. Ce gestionnaire ouvrira les connexions aux URL à l'aide du protocole "classpath".
<br>public class Handler extends 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(); }
}
Utilisation :
Utilisez le gestionnaire personnalisé pour spécifier le protocole de chemin de classe dans le URL lors du chargement des ressources.
<br>nouveau URL("classpath:org/my/package/resource.extension").openConnection();<br>
Gestion des problèmes de lancement :
Spécification du gestionnaire de code manuel :
Si possible, spécifiez manuellement le gestionnaire personnalisé lors de la création du URL.
<br>nouvelle URL(null, "classpath:some/package/resource.extension", new org.my.protocols.classpath.Handler(ClassLoader.getSystemClassLoader())) <br>
Gestionnaire JVM Inscription :
Enregistrez une URLStreamHandlerFactory auprès de la JVM pour gérer toutes les URL à l'aide du protocole classpath.
<br>URL.setURLStreamHandlerFactory(new ConfigurableStreamHandlerFactory("classpath", nouveau Handler(ClassLoader.getSystemClassLoader())));<br>
Avertissement :
L'enregistrement du gestionnaire JVM ne peut être appelé qu'une seule fois par JVM, soyez donc prudent lorsque vous l'utilisez dans des environnements où plusieurs gestionnaires peuvent entrer en conflit.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!