ServiceLoader<S> — 서비스 프로바이더를 로드하는 메커니즘
ServiceLoader — 서비스 프로바이더를 로드하는 메커니즘
ServiceLoader는 서비스 프로바이더(service provider) 를 검색, 로드, 사용하는 시설(facility)이에요. 클래스 패스나 모듈 경로에서 공급자를 찾아 서비스의 인스턴스를 제공해요. Java 6부터 도입됐고, Java 9 이후로는 모듈 시스템과도 통합돼요.
본문
public final class ServiceLoader<S> implements Iterable<S>
서비스 프로바이더는 서비스의 구현체(implementation) 로, 종종 공급자(provider)라고 불려요. ServiceLoader를 사용하면 서비스의 프로바이더를 런타임에 동적으로 찾아 로드할 수 있어요.
ServiceLoader<CodecSet> loader = ServiceLoader.load(CodecSet.class);
for (CodecSet provider : loader) {
// 각 프로바이더 사용
}
주요 정적 메서드
load(Class<S> service)— 서비스를 위해 서비스 프로바이더를 로드하는 새 로더를 생성해요 (스레드 컨텍스트 클래스 로더 사용).load(Class<S> service, ClassLoader loader)— 지정된 클래스 로더를 사용해 새 로더를 생성해요.loadInstalled(Class<S> service)— 플랫폼 클래스 로더를 사용해 새 로더를 생성해요.loadLayer(ModuleLayer layer, Class<S> service)— 주어진 모듈 레이어에서 사용 가능한 서비스 프로바이더를 로드해요.
주요 메서드
stream()— 이 로더로 로드할 수 있는 서비스 프로바이더를 나타내는 스트림을 반환해요.reload()— 이 로더의 사물을 지워 공급자를 다시 로드하게 해요.iterator()— 서비스의 프로바이더를 지연(lazily) 로드하며 순회하는 반복자를 반환해요.providers()— 로드된 프로바이더의 스냅샷 목록을 반환해요.
공급자를 로드·인스턴스화하는 중 문제가 생기면 ServiceConfigurationError가 발생해요.
- 도입 시점(Since): 1.6