Di Java, pelbagai sumber boleh dimuatkan menggunakan API yang serupa tetapi dengan protokol URL yang berbeza. Ini membenarkan untuk memisahkan proses pemuatan sumber daripada aplikasi dan memudahkan konfigurasi sumber.
Bolehkah anda menggunakan protokol untuk mendapatkan sumber menggunakan pemuat kelas semasa, serupa dengan protokol Jar tetapi tanpa menyatakan fail asal atau folder?
Ini boleh dicapai dengan melaksanakan adat URLStreamHandler dan mendaftarkannya dengan JVM.
import java.io.IOException; import java.net.URL; import java.net.URLConnection; import java.net.URLStreamHandler; import java.net.URLStreamHandlerFactory; import java.util.HashMap; import java.util.Map; public class ClasspathHandler extends URLStreamHandler { private final ClassLoader classLoader; public ClasspathHandler(ClassLoader classLoader) { this.classLoader = classLoader; } @Override protected URLConnection openConnection(URL u) throws IOException { // Locate the resource using the classloader URL resourceUrl = classLoader.getResource(u.getPath()); // Open the connection to the resource return resourceUrl.openConnection(); } }
Penggunaan: Pengendali tersuai boleh digunakan dengan URL untuk memuatkan sumber daripada laluan kelas:
new URL("classpath:org/my/package/resource.extension").openConnection();
Untuk menjadikan pengendali boleh diakses secara global, daftarkannya dengan JVM menggunakan URLStreamHandlerFactory:
import java.net.URL; import java.net.URLStreamHandler; import java.net.URLStreamHandlerFactory; import java.util.HashMap; import java.util.Map; public class ClasspathHandlerFactory implements URLStreamHandlerFactory { private final Map<String, URLStreamHandler> protocolHandlers; public ClasspathHandlerFactory() { protocolHandlers = new HashMap<String, URLStreamHandler>(); addHandler("classpath", new ClasspathHandler(ClassLoader.getSystemClassLoader())); } public void addHandler(String protocol, URLStreamHandler handler) { protocolHandlers.put(protocol, handler); } public URLStreamHandler createURLStreamHandler(String protocol) { return protocolHandlers.get(protocol); } }
Panggil URL.setURLSreamHandlerFactory() dengan mengkonfigurasi kilang untuk mendaftarkannya.
Pelaksanaan yang disediakan dikeluarkan ke domain awam. Pengarang menggalakkan pengubahsuaian untuk dikongsi dan disediakan secara terbuka.
Walaupun pendekatan ini memberikan fleksibiliti, adalah penting untuk mempertimbangkan isu-isu yang berpotensi, seperti kemungkinan beberapa pendaftaran Kilang Pengendali JVM dan Tomcat menggunakan pengendali JNDI. Oleh itu, ujian dalam persekitaran yang diingini adalah disyorkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memuatkan Sumber daripada Java Classpath Menggunakan Protokol URL Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!