ServiceLoader<S> — 서비스 프로바이더를 로드하는 메커니즘

ServiceLoader — 서비스 프로바이더를 로드하는 메커니즘

ServiceLoader서비스 프로바이더(service provider) 를 검색, 로드, 사용하는 시설(facility)이에요. 클래스 패스나 모듈 경로에서 공급자를 찾아 서비스의 인스턴스를 제공해요. Java 6부터 도입됐고, Java 9 이후로는 모듈 시스템과도 통합돼요.

출처: Java API Reference

본문

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

더 알아보기 (Learn more)