클래스 경로 프로토콜을 사용하여 리소스 로드
문제 설명:
클래스 경로에서 리소스 로드 특정 JAR 파일이나 클래스를 지정할 필요가 없는 URL 프로토콜 사용 폴더.
해결책:
URL 스트림 핸들러 구현:
클래스 경로에서 리소스를 로드하는 프로토콜을 생성하려면 , 사용자 정의 URLStreamHandler를 구현하십시오. 이 핸들러는 "classpath" 프로토콜을 사용하여 URL에 대한 연결을 엽니다.
<br>public class Handler는 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(); }
}
사용:
사용자 정의 핸들러를 사용하여 리소스를 로드할 때의 URL입니다.
<br>new URL("classpath:org/my/package/resource.extension").openConnection();<br>
실행 문제 처리:
수동 코드 처리기 사양:
가능하면 수동으로 지정하세요. URL을 생성할 때 사용자 정의 핸들러.
<br>new URL(null, "classpath:some/package/resource.extension", new org.my.protocols.classpath.Handler(ClassLoader. getSystemClassLoader()))<br>
JVM 핸들러 등록:
클래스 경로 프로토콜을 사용하여 모든 URL을 처리하려면 JVM에 URLStreamHandlerFactory를 등록하세요.
<br>URL.setURLStreamHandlerFactory(new ConfigurableStreamHandlerFactory("classpath" , 새로운 Handler(ClassLoader.getSystemClassLoader())));<br>
주의사항:
JVM 핸들러 등록은 JVM당 한 번만 호출할 수 있습니다. 따라서 여러 핸들러가 충돌할 수 있는 환경에서 사용할 때는 주의하세요.
위 내용은 사용자 정의 URL 프로토콜을 사용하여 클래스 경로 리소스를 로드하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!