JavaTM Platform
Standard Ed. 6

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

생성자 의 상세

ServiceRegistry

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

파라미터:
categories - 카테고리의 정의에 사용한다 Class 객체를 포함한 Iterator
예외:
IllegalArgumentException - categoriesnull 의 경우
메소드의 상세

lookupProviders

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

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

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

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

lookupProviders

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

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

getCategories

public Iterator <Class <? >> getCategories()
현재의 카테고리 세트를 나타내는 Class 객체의 Iterator 를 돌려줍니다. 카테고리가 존재하지 않는 경우, 반복자는 빈 상태(empty)입니다.

반환값:
Class 객체를 포함한다 Iterator

registerServiceProvider

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

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

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

registerServiceProvider

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

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

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

registerServiceProviders

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

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

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

deregisterServiceProvider

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

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

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

deregisterServiceProvider

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

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

contains

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

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

getServiceProviders

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

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

getServiceProviders

public <T> Iterator <T> getServiceProviders(Class <T> 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 <T> T getServiceProviderByClass(Class <T> providerClass)
현재 등록되어 있는, 지정된 클래스형의 프로바이더 객체를 돌려줍니다. 한 번에 등록할 수 있는 특정 클래스의 객체는 1 개 뿐입니다. 등록되어 있는 객체가 목적의 클래스형이 아닌 경우는,null 를 돌려줍니다.

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

setOrdering

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

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

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

unsetOrdering

public <T> boolean unsetOrdering(Class <T> category,
                                 T firstProvider,
                                 T 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 
가베지 컬렉션의 전에 이 객체를 finalize 합니다. deregisterAll 메소드를 호출해, 현재 등록되어 있는 서비스 프로바이더를 모두 등록 해제합니다. 이 메소드를, 어플리케이션 코드로부터 호출해 되지 않습니다.

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

JavaTM Platform
Standard Ed. 6

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

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.