クラスパス プロトコルを使用したリソースのロード
問題ステートメント:
クラスパスからのリソースのロード特定の JAR ファイルまたはクラスを指定する必要のない URL プロトコルを使用する
解決策:
URL ストリーム ハンドラーの実装:
クラスパスからリソースをロードするプロトコルを作成するには、カスタム URLStreamHandler を実装します。このハンドラーは、「クラスパス」プロトコルを使用して URL への接続を開きます。
<br>パブリック クラス ハンドラーは 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(); }
}
使用法:
カスタム ハンドラーを使用して、クラスパス プロトコルを指定します。読み込み時のURLリソース.
<br>新しい URL("classpath:org/my/package/resource.extension").openConnection();<br>
起動の処理問題:
手動コード ハンドラー仕様:
可能であれば、URL の作成時にカスタム ハンドラーを手動で指定します。
新しい URL(null, "classpath:some/package/resource.extension", new org.my.protocols.classpath.Handler(ClassLoader.getSystemClassLoader()))<br>
JVM ハンドラーの登録:
URLStreamHandlerFactory を登録するJVM でクラスパスを使用してすべての URL を処理するprotocol.
<br>URL.setURLStreamHandlerFactory(new ConfigurableStreamHandlerFactory("classpath", new Handler(ClassLoader.getSystemClassLoader())));<br>
注意:
JVM ハンドラーの登録は、JVM ごとに 1 回しか呼び出すことができないため、複数のハンドラーが競合する可能性がある環境で使用する場合は注意してください。
以上がカスタム URL プロトコルを使用してクラスパス リソースをロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。