Maison >Java >javaDidacticiel >Comment puis-je charger des ressources Classpath à l'aide d'un protocole URL personnalisé ?

Comment puis-je charger des ressources Classpath à l'aide d'un protocole URL personnalisé ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 07:42:12818parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn