Di Java, pembangun mempunyai akses kepada API pemuatan sumber serba boleh menggunakan pelbagai protokol URL. Walau bagaimanapun, sementara protokol seperti "file://" dan "http://" memudahkan pengambilan semula sumber dari lokasi tertentu, mungkin terdapat keperluan untuk mengakses sumber daripada laluan kelas aplikasi tanpa menyatakan secara eksplisit balang atau folder kelas. Artikel ini meneroka penyelesaian kepada keperluan ini, memperkenalkan protokol URL tersuai dan pengendali strim untuk pemuatan sumber berasaskan laluan kelas.
Pusat penyelesaian ialah URLStreamHandler yang dibuka sambungan ke URL yang ditentukan. Pengendali ini mesti didaftarkan dengan kelas URL menggunakan nama pakej "mudah" sebagai protokol yang disokong.
package org.my.protocols.classpath; import java.net.URL; import java.net.URLConnection; import java.net.URLStreamHandler; public class Handler extends URLStreamHandler { private final ClassLoader classLoader; public Handler() { this.classLoader = getClass().getClassLoader(); } @Override protected URLConnection openConnection(URL u) /*throws IOException*/ { final URL resourceUrl = classLoader.getResource(u.getPath()); return resourceUrl.openConnection(); } }
Untuk memuatkan sumber menggunakan protokol tersuai, gunakan sintaks berikut:
new URL("classpath:org/my/package/resource.extension").openConnection();
Dengan menentukan laluan relatif kepada laluan kelas, ia menjadi mungkin untuk memuatkan sumber tanpa menyatakan lokasi khusus mereka dalam laluan kelas.
Untuk memastikan pengendalian sumber yang betul dimuatkan daripada laluan kelas, mungkin perlu untuk mengatasi isu dengan konfigurasi pelancaran dan pendaftaran pengendali peringkat JVM.
Sebagai alternatif kepada pendaftaran pengendali automatik, adalah mungkin untuk menentukan secara manual pengendali semasa pembuatan URL:
new URL( null, "classpath:some/package/resource.extension", new org.my.protocols.classpath.Handler(ClassLoader.getSystemClassLoader()) );
Untuk pemuatan sumber laluan kelas seluruh aplikasi, adalah disyorkan untuk mendaftarkan URLStreamHandlerFactory dengan JVM. Ini membolehkan pengendali tersuai digunakan untuk semua URL:
package my.org.url; import java.net.URLStreamHandler; import java.net.URLStreamHandlerFactory; import java.util.HashMap; import java.util.Map; class ConfigurableStreamHandlerFactory implements URLStreamHandlerFactory { private final Map<String, URLStreamHandler> protocolHandlers; public ConfigurableStreamHandlerFactory(String protocol, URLStreamHandler urlHandler) { protocolHandlers = new HashMap<>(); addHandler(protocol, urlHandler); } public void addHandler(String protocol, URLStreamHandler urlHandler) { protocolHandlers.put(protocol, urlHandler); } public URLStreamHandler createURLStreamHandler(String protocol) { return protocolHandlers.get(protocol); } }
Untuk mendaftar kilang, hubungi URL.setURLSreamHandlerFactory() melepasi kilang yang dikonfigurasikan.
Dengan mencipta URLStreamHandler tersuai dan kilang pengendali strim, adalah mungkin untuk melanjutkan pemuatan sumber Java keupayaan untuk memasukkan sumber yang terdapat pada laluan kelas aplikasi. Ini membolehkan lebih fleksibiliti dan memudahkan proses memuatkan sumber daripada pelbagai sumber.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyesuaikan Sokongan URL Java untuk Memuatkan Sumber Terus daripada Classpath?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!