JavaTM 2
Platform
Std.  Ed.  v1. 4.0

javax.imageio.spi
클래스 ServiceRegistry

java.lang.Object 
  |
  +--javax.imageio.spi.ServiceRegistry
직계의 기존의 서브 클래스:
IIORegistry

public class ServiceRegistry
extends Object

서비스 프로바이더 인스턴스의 레지스트리입니다.

「서비스」란, 기존의 인터페이스 및 클래스 (통상은 추상 클래스)세트입니다. 「서비스 프로바이더」란, 특정의 서비스의 구현입니다. 프로바이더내의 클래스는 통상, 인터페이스를 구현하는지 또는 서비스 자체가 정의된 클래스를 서브 클래스화합니다.

서비스 프로바이더는 1 개 또는 복수의 「카테고리」에 저장됩니다. 각 카테고리는 그 모든 멤버를 구현할 필요가 있는 클래스 인터페이스 (Class 오브젝트에 의해 기술된다)로 정의됩니다. 카테고리 세트는 동적으로 변경할 수 있습니다.

지정된 리프 클래스 (즉, 임의의 계승된 클래스나 인터페이스는 아니고,getClass() 로 돌려주어진 실제의 클래스)의 1 개의 인스턴스만을 등록할 수 있습니다. 여기서,com.mycompany.mypkg.GreenServiceProvider 클래스가 com.mycompany.mypkg.MyService 인터페이스를 구현하면(자) 가정합니다. GreenServiceProvider 인터페이스를 등록하는 경우, 이것은 MyService 클래스에 의해 정의된 카테고리에 저장됩니다. GreenServiceProvider 의 새로운 인스턴스를 등록하는 경우, 이것은 이전의 인스턴스를 바꿔 놓습니다. 통상, 서비스 프로바이더 오브젝트는 단체이기 (위해)때문에, 이 동작은 적절합니다.

서비스 프로바이더를 선언하기 위해서,services 서브 디렉토리가 각 JAR 파일에 존재하는 META-INF 디렉토리내에 배치됩니다. 이 디렉토리에는 JAR 파일에 1 개 또는 복수의 구현 클래스를 보관 유지하는 각 서비스 프로바이더 인터페이스에 대해서 1 개의 파일이 포함됩니다. 예를 들어, JAR 파일에 javax.someapi.SomeService 인터페이스를 구현하는 com.mycompany.mypkg.MyServiceImpl 라고 하는 클래스가 포함되는 경우, JAR 에는 다음의 이름의 파일이 포함됩니다.

 META-INF/services/javax.someapi.SomeService 
또, 다음의 행이 포함됩니다.
 com.mycompany.mypkg.MyService
 

서비스 프로바이더 클래스는 경량으로, 신속히 로드할 필요가 있습니다. 이러한 인터페이스의 구현은 다른 클래스나 native code에 복잡하게 의존하지 않게 할 필요가 있습니다. 복잡한 서비스의 경우의 통상의 패턴은 부하의 높은 서비스에 대해서 경량인 프록시를 등록한다고 하는 것입니다.

적절한 실행시 액세스권이 있으면, 어플리케이션으로 레지스트리의 내용을 필요에 따라서 커스터마이즈 할 수 있습니다.

서비스 프로바이더 선언의 상세 및 JAR 형식 전반에 대해서는 「JAR File Specification」를 참조해 주세요.

관련 항목:
RegisterableService

중첩된 클래스의 개요
static interface ServiceRegistry.Filter
          임의의 기준에 일치하는 프로바이더를 선택하기 위해서 ServiceRegistry.getServiceProviders 로 사용되는 단순한 필터 인터페이스입니다.
 
생성자의 개요
ServiceRegistry (Iterator  categories)
          categories 인수로부터 꺼낸 카테고리 세트를 사용해 ServiceRegistry 인스턴스를 구축합니다.
 
메소드의 개요
 boolean contains (Object  provider)
          provider 가 현재 등록되어 있는 경우는 true 를 돌려줍니다.
 void deregisterAll ()
          현재 등록되어 모든 서비스 프로바이더 오브젝트를, 모든 카테고리로부터 등록 해제합니다.
 void deregisterAll (Class  category)
          현재 지정된 카테고리에 등록되어 있는 서비스 프로바이더 오브젝트를 모두 등록 해제합니다.
 void deregisterServiceProvider (Object  provider)
          서비스 프로바이더 오브젝트를, 그것을 포함한 모든 카테고리로부터 삭제합니다.
 boolean deregisterServiceProvider (Object  provider, Class  category)
          지정된 카테고리로부터 서비스 프로바이더 오브젝트를 삭제합니다.
 void finalize ()
          가베지 콜렉션의 전에 이 오브젝트를 파이나라이즈 합니다.
 Iterator getCategories ()
          현재의 카테고리 세트를 나타내는 Class 오브젝트의 Iterator 를 돌려줍니다.
 Object getServiceProviderByClass (Class  providerClass)
          현재 등록되어 있는 지정된 클래스형의 프로바이더 오브젝트를 돌려줍니다.
 Iterator getServiceProviders (Class  category, boolean useOrdering)
          지정된 카테고리내의 등록이 끝난 서비스 프로바이더를 모두 포함한 Iterator 를 돌려줍니다.
 Iterator getServiceProviders (Class  category, ServiceRegistry.Filter  filter, boolean useOrdering)
          지정된 ServiceRegistry.Filter 오브젝트의 filter 메소드로 설정된 기준을 채우는 지정된 카테고리내의 서비스 프로바이더 오브젝트를 포함한 Iterator 를 돌려줍니다.
static Iterator lookupProviders (Class  providerClass)
          문맥 클래스 로더를 사용해, 지정된 서비스의 사용 가능한 프로바이더를 검출해 단계적으로 인스턴스화합니다.
static Iterator lookupProviders (Class  providerClass, ClassLoader  loader)
          지정된 클래스 로더를 사용해 특정의 서비스 클래스의 구현을 검색합니다.
 void registerServiceProvider (Object  provider)
          서비스 프로바이더 오브젝트를 레지스트리에 추가합니다.
 boolean registerServiceProvider (Object  provider, Class  category)
          서비스 프로바이더 오브젝트를 레지스트리에 추가합니다.
 void registerServiceProviders (Iterator  providers)
          Iterator 로부터 수중에 넣은 일련의 서비스 프로바이더 오브젝트를 레지스트리에 추가합니다.
 boolean setOrdering (Class  category, Object  firstProvider, Object  secondProvider)
          지정된 카테고리내의 2 개의 서비스 프로바이더 오브젝트간의 페어의 순서를 설정합니다.
 boolean unsetOrdering (Class  category, Object  firstProvider, Object  secondProvider)
          지정된 카테고리의 2 개의 서비스 프로바이더 오브젝트간의 페어의 순서를 설정합니다.
 
클래스 java.lang. Object 에서 상속받은 메소드
clone , equals , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

생성자의 상세

ServiceRegistry

public ServiceRegistry(Iterator  categories)
categories 인수로부터 꺼낸 카테고리 세트를 사용해 ServiceRegistry 인스턴스를 구축합니다.

파라미터:
categories - 카테고리의 정의에 사용하는 Class 오브젝트를 포함한 Iterator
예외:
IllegalArgumentException - categoriesnull 의 경우
메소드의 상세

lookupProviders

public static Iterator  lookupProviders(Class  providerClass,
                                       ClassLoader  loader)
지정된 클래스 로더를 사용해 특정의 서비스 클래스의 구현을 검색합니다.

이 메소드는 지정된 서비스 클래스의 이름을, 클래스 코멘트의 기술에 따라 프로바이더 구성의 파일명으로 변환해, 지정된 클래스 로더의 getResources 메소드를 사용해 그 이름을 가지는 사용 가능한 파일 모든 것을 검색합니다. 이러한 파일은 다음에 읽혀 구문 분석 되어 프로바이더 클래스명의 리스트가 작성됩니다. 돌려주어진 반복자는 지정된 클래스 로더를 사용해, 리스트의 각 요소를 참조해 인스턴스화합니다.

실행중의 Java 가상 머신에 확장 기능을 인스톨 하는 것이 가능하기 때문에, 이 메소드는 불려 갈 때마다 다른 결과를 돌려주는 경우가 있습니다.

파라미터:
providerClass - 검출중의 서비스 프로바이더의 클래스 또는 인터페이스를 나타내는 Class 오브젝트
loader - 프로바이더 구성 파일의 로드 및 프로바이더 클래스의 인스턴스화에 사용하는 클래스 로더. 시스템 클래스 로더를 사용하는 경우, 또는 bootstrap 클래스 로더로 실패했을 경우는 null
반환값:
지정된 서비스의 프로바이더 오브젝트를, 임의의 차례로 생성하는 Iterator. 프로바이더 구성 파일이 지정된 형식에 위반하는지 또는 프로바이더 클래스를 검출해 인스턴스화할 수 없는 경우, 반복자에 의해 Error 가 슬로우 됩니다.
예외:
IllegalArgumentException - providerClassnull 의 경우

lookupProviders

public static Iterator  lookupProviders(Class  providerClass)
문맥 클래스 로더를 사용해, 지정된 서비스의 사용 가능한 프로바이더를 검출해 단계적으로 인스턴스화합니다. 이 편리한 메소드는 다음의 지정과 같습니다.
   ClassLoader cl = Thread.currentThread(). getContextClassLoader();
   return Service.providers(service, cl);
 

파라미터:
providerClass - 검출중의 서비스 프로바이더의 클래스 또는 인터페이스를 나타내는 Class 오브젝트
반환값:
지정된 서비스의 프로바이더 오브젝트를, 임의의 차례로 생성하는 Iterator. 프로바이더 구성의 파일이 지정된 형식에 위반하는지 또는 프로바이더 클래스를 검출해 인스턴스화할 수 없는 경우, 반복자에 의해 Error 가 슬로우 됩니다.
예외:
IllegalArgumentException - providerClassnull 의 경우

getCategories

public Iterator  getCategories()
현재의 카테고리 세트를 나타내는 Class 오브젝트의 Iterator 를 돌려줍니다. 카테고리가 존재하지 않는 경우, 반복자는 하늘입니다.

반환값:
Class 오브젝트를 포함한 Iterator

registerServiceProvider

public boolean registerServiceProvider(Object  provider,
                                       Class  category)
서비스 프로바이더 오브젝트를 레지스트리에 추가합니다. 프로바이더는 지정된 카테고리에 관련짓고 됩니다.

providerRegisterableService 인터페이스를 구현하는 경우,onRegistration 메소드가 불려 갑니다. 그 onDeregistration 메소드는 카테고리의 삭제나 레지스트리의 가베지 컬렉트 등, 카테고리로부터 등록 해제될 때마다 불려 갑니다.

파라미터:
provider - 등록되는 서비스 프로바이더 오브젝트
category - 프로바이더가 등록되는 카테고리
반환값:
이전에 같은 카테고리에 같은 클래스의 프로바이더가 등록되지 않았던 경우는 true
예외:
IllegalArgumentException - providernull 의 경우
IllegalArgumentException - category 에 대응하는 카테고리가 존재하지 않는 경우
ClassCastException - 프로바이더가 category 로 정의된 Class 를 구현하지 않는 경우

registerServiceProvider

public void registerServiceProvider(Object  provider)
서비스 프로바이더 오브젝트를 레지스트리에 추가합니다. 프로바이더는 Class 를 구현하는 레지스트리에 존재하는 각 카테고리내에서 관련짓고 됩니다.

providerRegisterableService 인터페이스를 구현하는 경우,onRegistration 메소드가 등록되는 카테고리 마다 한 번 불려 갑니다. 그 onDeregistration 메소드는 카테고리로부터 등록 해제될 때, 또는 레지스트리가 파이나라이즈 될 때에 불려 갑니다.

파라미터:
provider - 등록되는 서비스 프로바이더 오브젝트
예외:
IllegalArgumentException - providernull 의 경우

registerServiceProviders

public void registerServiceProviders(Iterator  providers)
Iterator 로부터 수중에 넣은 일련의 서비스 프로바이더 오브젝트를 레지스트리에 추가합니다. 각 프로바이더는 Class 를 구현하는 레지스트리에 존재하는 각 카테고리내에서 관련짓고 됩니다.

RegisterableService 인터페이스를 구현하는 provider 의 각 엔트리의 경우,onRegistration 메소드가 등록되는 카테고리 마다 한 번 불려 갑니다. 그 onDeregistration 메소드는 카테고리로부터 등록 해제될 때, 또는 레지스트리가 파이나라이즈 될 때에 불려 갑니다.

파라미터:
providers - 등록되는 서비스 프로바이더 오브젝트를 포함한 반복자
예외:
IllegalArgumentException - providersnull 인지 null 엔트리를 포함한 경우

deregisterServiceProvider

public boolean deregisterServiceProvider(Object  provider,
                                         Class  category)
지정된 카테고리로부터 서비스 프로바이더 오브젝트를 삭제합니다. 이 프로바이더가 이전에 등록되지 않은 경우는 아무것도 실행하지 않고 false 를 돌려줍니다. 그렇지 않은 경우는 true 를 돌려줍니다. provider 와 같은 클래스의 오브젝트여도 provider 와 동일하지 않은 (== 로 비교) 경우, 등록은 해제되지 않습니다.

providerRegisterableService 인스턴스를 구현하는 경우, 그 onDeregistration 메소드가 불려 갑니다.

파라미터:
provider - 등록 해제하는 서비스 프로바이더 오브젝트
category - 프로바이더가 등록 해제되는 카테고리
반환값:
프로바이더가 이전에 같은 category 카테고리에 등록되었을 경우는 true, 그렇지 않은 경우는 false
예외:
IllegalArgumentException - providernull 의 경우
IllegalArgumentException - category 에 대응하는 카테고리가 존재하지 않는 경우
ClassCastException - 프로바이더가 category 로 정의된 클래스를 구현하지 않는 경우

deregisterServiceProvider

public void deregisterServiceProvider(Object  provider)
서비스 프로바이더 오브젝트를, 그것을 포함한 모든 카테고리로부터 삭제합니다.

파라미터:
provider - 등록 해제되는 서비스 프로바이더 오브젝트
예외:
IllegalArgumentException - providernull 의 경우

contains

public boolean contains(Object  provider)
provider 가 현재 등록되어 있는 경우는 true 를 돌려줍니다.

파라미터:
provider - 조회되는 서비스 프로바이더 오브젝트
반환값:
지정된 프로바이더가 등록을 마친 경우는 true
예외:
IllegalArgumentException - providernull 의 경우

getServiceProviders

public Iterator  getServiceProviders(Class  category,
                                    boolean useOrdering)
지정된 카테고리내의 등록이 끝난 서비스 프로바이더를 모두 포함한 Iterator 를 돌려줍니다. useOrderingfalse 의 경우, 반복자는 모든 서비스 프로바이더 오브젝트를 임의의 순서로 돌려줍니다. 그 이외의 경우, 차례는 설정된 페어의 순서 붙이고 모든 것을 반영합니다. 페어의 순서부의 그래프에 사이클이 포함되는 경우, 사이클에 소속하는 프로바이더는 어느 것도 돌려주어지지 않습니다.

파라미터:
category - 취득원의 카테고리
useOrdering - 돌려주어지는 오브젝트의 차례로 페어의 순서부를 반영하는 경우는 true
반환값:
지정된 카테고리로부터의 서비스 프로바이더 오브젝트를 포함한 Iterator (대체로는 그 차례 대로)
예외:
IllegalArgumentException - category 에 대응하는 카테고리가 존재하지 않는 경우

getServiceProviders

public Iterator  getServiceProviders(Class  category,
                                    ServiceRegistry.Filter  filter,
                                    boolean useOrdering)
지정된 ServiceRegistry.Filter 오브젝트의 filter 메소드로 설정된 기준을 채우는 지정된 카테고리내의 서비스 프로바이더 오브젝트를 포함한 Iterator 를 돌려줍니다.

useOrdering 인수에 의해,getServiceProviders(Class, boolean) 와 같은 규칙을 사용해 결과의 순서부가 제어됩니다.

파라미터:
category - 취득원의 카테고리
filter - filter 메소드가 불려 가는 ServiceRegistry.Filter 인스턴스
useOrdering - 돌려주어지는 오브젝트의 차례로 페어의 순서부를 반영하는 경우는 true
반환값:
지정된 카테고리로부터의 서비스 프로바이더 오브젝트를 포함한 Iterator (대체로는 그 차례 대로)
예외:
IllegalArgumentException - category 에 대응하는 카테고리가 존재하지 않는 경우

getServiceProviderByClass

public Object  getServiceProviderByClass(Class  providerClass)
현재 등록되어 있는 지정된 클래스형의 프로바이더 오브젝트를 돌려줍니다. 한 번에 등록할 수 있는 특정 클래스의 오브젝트는 1 개 뿐입니다. 등록되어 있는 오브젝트가 목적의 클래스형이 아닌 경우는 null 를 돌려줍니다.

파라미터:
providerClass - 목적으로 하는 서비스 프로바이더 오브젝트의 Class
반환값:
현재 등록되어 있는 목적의 Class 형의 서비스 프로바이더 오브젝트. 존재하지 않는 경우는 null
예외:
IllegalArgumentException - providerClassnull 의 경우

setOrdering

public boolean setOrdering(Class  category,
                           Object  firstProvider,
                           Object  secondProvider)
지정된 카테고리내의 2 개의 서비스 프로바이더 오브젝트간의 페어의 순서를 설정합니다. 오브젝트 중의 1 kr 또는 양쪽 모두가, 지정된 카테고리내에 현재 등록되지 않은 경우, 또는 목적의 순서가 벌써 설정되어 있는 경우는 아무것도 실행하지 않고 false 를 돌려줍니다. 프로바이더가 이전에 역방향으로 순서 붙이고 되었을 경우, 그 순서는 삭제됩니다.

순서는 getServiceProviders 메소드에 의해, 그 useOrdering 인수가 true 의 경우에 사용됩니다.

파라미터:
category - 우선도를 설정하는 카테고리를 나타내는 Class 오브젝트
firstProvider - 우선되는 프로바이더
secondProvider - firstProvider 가 우선되는 프로바이더
반환값:
이전으로 설정되지 않았던 순서가 설정되었을 경우는 true
예외:
IllegalArgumentException - 프로바이더가 null 인가, 또는 같은 오브젝트의 경우
IllegalArgumentException - category 에 대응하는 카테고리가 없는 경우

unsetOrdering

public boolean unsetOrdering(Class  category,
                             Object  firstProvider,
                             Object  secondProvider)
지정된 카테고리의 2 개의 서비스 프로바이더 오브젝트간의 페어의 순서를 설정합니다. 오브젝트의 1 개 또는 양쪽 모두가 지정된 카테고리내에 현재 등록되지 않은 경우, 또는 그 사이의 순서부가 현재 설정되어 있지 않은 경우는 아무것도 실행하지 않고 false 를 돌려줍니다.

순서는 useOrdering 인수가 true 의 경우에,getServiceProviders 메소드에 의해 사용됩니다.

파라미터:
category - 우선도의 설정이 해제되는 카테고리를 나타내는 Class 오브젝트
firstProvider - 이전의 우선 프로바이더
secondProvider - firstProvider 가 이전 우선되고 있던 프로바이더
반환값:
이전으로 설정된 순서 설정이 해제되었을 경우는 true
예외:
IllegalArgumentException - 프로바이더가 null 인가, 또는 같은 오브젝트의 경우
IllegalArgumentException - category 에 대응하는 카테고리가 존재하지 않는 경우

deregisterAll

public void deregisterAll(Class  category)
현재 지정된 카테고리에 등록되어 있는 서비스 프로바이더 오브젝트를 모두 등록 해제합니다.

파라미터:
category - 비우는 카테고리
예외:
IllegalArgumentException - category 에 대응하는 카테고리가 존재하지 않는 경우

deregisterAll

public void deregisterAll()
현재 등록되어 모든 서비스 프로바이더 오브젝트를, 모든 카테고리로부터 등록 해제합니다.


finalize

public void finalize()
              throws Throwable 
가베지 콜렉션의 전에 이 오브젝트를 파이나라이즈 합니다. deregisterAll 메소드를 호출해, 현재 등록되어 있는 서비스 프로바이더를 모두 등록 해제합니다. 이 메소드를, 어플리케이션 코드로부터 호출해 되지 않습니다.

오버라이드(override):
클래스 Object 내의 finalize
예외:
Throwable - 슈퍼 클래스의 파이나라이즈시에 에러가 발생했을 경우

JavaTM 2
Platform
Std.  Ed.  v1. 4.0

버그의 보고와 기능의 리퀘스트
이외의 API 레퍼런스 및 개발자용 문서에 대해서는 Java 2 SDK SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Java, Java 2 D, 및 JDBC 는 미국 및 그 외의 나라에 있어서의 미국 Sun Microsystems, Inc. 의 상표 혹은 등록상표입니다.
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.