2017-12-13 15 views
0

저는 확장 가능한 응용 프로그램을 작성하고 있습니다. ServiceLoader 유틸리티 클래스에 대한 설명서를 읽기클래스 로더 및 서비스 로더. 어떤 클래스 로더가 사용됩니까?

, 나는 다음과 같은 문장을 이해 할 수 없습니다 :

하는 공급자가 처음 구성 파일의 위치를 ​​조회 된 클래스 로더로부터 액세스 할 수 있어야합니다을; 이것은 반드시 파일이 실제로로드 된 클래스 로더 일 필요는 없습니다.

누구든지 내게 설명 할 수있는 것은 무엇입니까?

구성 파일을 찾는 데 사용되는 클래스 로더를 어떻게 결정할 수 있습니까?

답변

2

누구든지 내게 설명 할 수있는 것은 무엇입니까?

ClassLoaders은 위임을 수행 할 수 있다는 사실을 언급 한 것 같습니다. 내가 수행 할 경우, 다음이 부모 ClassLoaderClassLoaderMyClass의 대리인이 등 부모에 하나가되지 않도록 어쩌면 있다는 것을있을 수

MyClass.class.getClassLoader().getResource("/services/org/my/Service"); 

구성 파일을 찾을 말 ClassLoader 실제로 구성 파일을로드하는 ( MyClass.class.getClassLoader())을 쿼리했습니다. 이 경우

은 사양 ClassLoader 실제로이 설정 파일의 위치를 ​​상관없이, 서비스 클래스는 이름이 MyClass.class.getClassLoader()에서 액세스 할 수 있어야합니다 말한다. 나는 여기서 자신의 대표단을 배제하지 않기 위해 "접근 가능"하다.

실제로 이러한 규정은 예를 들어 JavaEE 컨테이너에서 볼 수있는 것처럼 ClassLoaders 체인을 단순 위임하는 것보다 더 흥미로운 전략을 따르는 구현에서 더 현저 할 수 있습니다.

어떻게 구성 파일을 찾는 데 어떤 클래스 로더를 사용할 수 있습니까?

일반적으로 말해야 할 필요는 없습니다. 주어진 서비스 구성 파일에 의해 명명 된 서비스 클래스가 config 파일 자체와 동일한 (모두) ClassLoader을 통해 모두 액세스 할 수 있도록 보장하는 것이 가장 좋은 전략으로 권장됩니다. 예를 들어 jar에 넣으면됩니다.