Java에서는 유사한 API를 사용하지만 다른 URL 프로토콜을 사용하여 다양한 리소스를 로드할 수 있습니다. 이를 통해 애플리케이션에서 리소스 로딩 프로세스를 분리할 수 있고 리소스 구성이 단순화됩니다.
Jar 프로토콜과 유사하지만 원본 파일을 지정하지 않고 현재 클래스 로더를 사용하여 리소스를 얻기 위해 프로토콜을 활용할 수 있습니까? 폴더?
이는 사용자 정의 URLStreamHandler를 구현하여 달성할 수 있으며 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(); } }
사용법: 사용자 정의 핸들러를 사용할 수 있습니다. 클래스 경로에서 리소스를 로드하기 위한 URL 사용:
new URL("classpath:org/my/package/resource.extension").openConnection();
핸들러를 전역적으로 액세스할 수 있도록 하려면 URLStreamHandlerFactory를 사용하여 핸들러를 JVM에 등록하세요.
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); } }
구성된 팩토리를 사용하여 URL.setURLStreamHandlerFactory()를 호출하여 등록하세요.
제공된 구현은 공개 도메인으로 공개됩니다. 저자는 수정 사항을 공유하고 공개적으로 사용할 수 있도록 권장합니다.
이 접근 방식은 유연성을 제공하지만 여러 JVM 핸들러 팩토리 등록 가능성과 같은 잠재적인 문제를 고려하는 것이 중요합니다. Tomcat의 JNDI 핸들러 사용. 따라서 원하는 환경에서 테스트해 보시기를 권장합니다.
위 내용은 사용자 정의 URL 프로토콜을 사용하여 Java 클래스 경로에서 리소스를 로드하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!