>Java >java지도 시간 >사용자 정의 URL 프로토콜을 사용하여 클래스 경로 리소스를 로드하려면 어떻게 해야 합니까?

사용자 정의 URL 프로토콜을 사용하여 클래스 경로 리소스를 로드하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-26 07:42:12779검색

How Can I Load Classpath Resources Using a Custom URL Protocol?

클래스 경로 프로토콜을 사용하여 리소스 로드

문제 설명:

클래스 경로에서 리소스 로드 특정 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.