|
JavaTM 2 Platform Std. Ed. v1. 4.0 |
||||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 모든 클래스 | ||||||||||
개요: 상자 | 필드 | constructor | 메소드 | 상세: 필드 | constructor | 메소드 |
java.lang.Object | +--javax.imageio.spi.ServiceRegistry
서비스 프로바이더 인스턴스의 레지스트리입니다.
「서비스」란, 기존의 인터페이스 및 클래스 (통상은 추상 클래스)세트입니다. 「서비스 프로바이더」란, 특정의 서비스의 구현입니다. 프로바이더내의 클래스는 통상, 인터페이스를 구현하는지 또는 서비스 자체가 정의된 클래스를 서브 클래스화합니다.
서비스 프로바이더는 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 |
생성자의 상세 |
public ServiceRegistry(Iterator categories)
categories
인수로부터 꺼낸 카테고리 세트를 사용해 ServiceRegistry
인스턴스를 구축합니다.
categories
- 카테고리의 정의에 사용하는 Class
오브젝트를 포함한 Iterator
IllegalArgumentException
- categories
가 null
의 경우메소드의 상세 |
public static Iterator lookupProviders(Class providerClass, ClassLoader loader)
이 메소드는 지정된 서비스 클래스의 이름을, 클래스 코멘트의 기술에 따라 프로바이더 구성의 파일명으로 변환해, 지정된 클래스 로더의 getResources
메소드를 사용해 그 이름을 가지는 사용 가능한 파일 모든 것을 검색합니다. 이러한 파일은 다음에 읽혀 구문 분석 되어 프로바이더 클래스명의 리스트가 작성됩니다. 돌려주어진 반복자는 지정된 클래스 로더를 사용해, 리스트의 각 요소를 참조해 인스턴스화합니다.
실행중의 Java 가상 머신에 확장 기능을 인스톨 하는 것이 가능하기 때문에, 이 메소드는 불려 갈 때마다 다른 결과를 돌려주는 경우가 있습니다.
providerClass
- 검출중의 서비스 프로바이더의 클래스 또는 인터페이스를 나타내는 Class
오브젝트loader
- 프로바이더 구성 파일의 로드 및 프로바이더 클래스의 인스턴스화에 사용하는 클래스 로더. 시스템 클래스 로더를 사용하는 경우, 또는 bootstrap 클래스 로더로 실패했을 경우는 null
Iterator
. 프로바이더 구성 파일이 지정된 형식에 위반하는지 또는 프로바이더 클래스를 검출해 인스턴스화할 수 없는 경우, 반복자에 의해 Error
가 슬로우 됩니다.
IllegalArgumentException
- providerClass
가 null
의 경우public static Iterator lookupProviders(Class providerClass)
ClassLoader cl = Thread.currentThread(). getContextClassLoader(); return Service.providers(service, cl);
providerClass
- 검출중의 서비스 프로바이더의 클래스 또는 인터페이스를 나타내는 Class
오브젝트
Iterator
. 프로바이더 구성의 파일이 지정된 형식에 위반하는지 또는 프로바이더 클래스를 검출해 인스턴스화할 수 없는 경우, 반복자에 의해 Error
가 슬로우 됩니다.
IllegalArgumentException
- providerClass
가 null
의 경우public Iterator getCategories()
Class
오브젝트의 Iterator
를 돌려줍니다. 카테고리가 존재하지 않는 경우, 반복자는 하늘입니다.
Class
오브젝트를 포함한 Iterator
public boolean registerServiceProvider(Object provider, Class category)
provider
가 RegisterableService
인터페이스를 구현하는 경우,onRegistration
메소드가 불려 갑니다. 그 onDeregistration
메소드는 카테고리의 삭제나 레지스트리의 가베지 컬렉트 등, 카테고리로부터 등록 해제될 때마다 불려 갑니다.
provider
- 등록되는 서비스 프로바이더 오브젝트category
- 프로바이더가 등록되는 카테고리
IllegalArgumentException
- provider
가 null
의 경우
IllegalArgumentException
- category
에 대응하는 카테고리가 존재하지 않는 경우
ClassCastException
- 프로바이더가 category
로 정의된 Class
를 구현하지 않는 경우public void registerServiceProvider(Object provider)
Class
를 구현하는 레지스트리에 존재하는 각 카테고리내에서 관련짓고 됩니다.
provider
가 RegisterableService
인터페이스를 구현하는 경우,onRegistration
메소드가 등록되는 카테고리 마다 한 번 불려 갑니다. 그 onDeregistration
메소드는 카테고리로부터 등록 해제될 때, 또는 레지스트리가 파이나라이즈 될 때에 불려 갑니다.
provider
- 등록되는 서비스 프로바이더 오브젝트
IllegalArgumentException
- provider
가 null
의 경우public void registerServiceProviders(Iterator providers)
Iterator
로부터 수중에 넣은 일련의 서비스 프로바이더 오브젝트를 레지스트리에 추가합니다. 각 프로바이더는 Class
를 구현하는 레지스트리에 존재하는 각 카테고리내에서 관련짓고 됩니다.
RegisterableService 인터페이스를 구현하는 provider
의 각 엔트리의 경우,onRegistration
메소드가 등록되는 카테고리 마다 한 번 불려 갑니다. 그 onDeregistration
메소드는 카테고리로부터 등록 해제될 때, 또는 레지스트리가 파이나라이즈 될 때에 불려 갑니다.
providers
- 등록되는 서비스 프로바이더 오브젝트를 포함한 반복자
IllegalArgumentException
- providers
가 null
인지 null
엔트리를 포함한 경우public boolean deregisterServiceProvider(Object provider, Class category)
false
를 돌려줍니다. 그렇지 않은 경우는 true
를 돌려줍니다. provider
와 같은 클래스의 오브젝트여도 provider
와 동일하지 않은 (==
로 비교) 경우, 등록은 해제되지 않습니다.
provider
가 RegisterableService
인스턴스를 구현하는 경우, 그 onDeregistration
메소드가 불려 갑니다.
provider
- 등록 해제하는 서비스 프로바이더 오브젝트category
- 프로바이더가 등록 해제되는 카테고리
true
, 그렇지 않은 경우는 false
IllegalArgumentException
- provider
가 null
의 경우
IllegalArgumentException
- category
에 대응하는 카테고리가 존재하지 않는 경우
ClassCastException
- 프로바이더가 category
로 정의된 클래스를 구현하지 않는 경우public void deregisterServiceProvider(Object provider)
provider
- 등록 해제되는 서비스 프로바이더 오브젝트
IllegalArgumentException
- provider
가 null
의 경우public boolean contains(Object provider)
provider
가 현재 등록되어 있는 경우는 true
를 돌려줍니다.
provider
- 조회되는 서비스 프로바이더 오브젝트
true
IllegalArgumentException
- provider
가 null
의 경우public Iterator getServiceProviders(Class category, boolean useOrdering)
Iterator
를 돌려줍니다. useOrdering
가 false
의 경우, 반복자는 모든 서비스 프로바이더 오브젝트를 임의의 순서로 돌려줍니다. 그 이외의 경우, 차례는 설정된 페어의 순서 붙이고 모든 것을 반영합니다. 페어의 순서부의 그래프에 사이클이 포함되는 경우, 사이클에 소속하는 프로바이더는 어느 것도 돌려주어지지 않습니다.
category
- 취득원의 카테고리useOrdering
- 돌려주어지는 오브젝트의 차례로 페어의 순서부를 반영하는 경우는 true
Iterator
(대체로는 그 차례 대로)
IllegalArgumentException
- category
에 대응하는 카테고리가 존재하지 않는 경우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
에 대응하는 카테고리가 존재하지 않는 경우public Object getServiceProviderByClass(Class providerClass)
null
를 돌려줍니다.
providerClass
- 목적으로 하는 서비스 프로바이더 오브젝트의 Class
Class
형의 서비스 프로바이더 오브젝트. 존재하지 않는 경우는 null
IllegalArgumentException
- providerClass
가 null
의 경우public boolean setOrdering(Class category, Object firstProvider, Object secondProvider)
false
를 돌려줍니다. 프로바이더가 이전에 역방향으로 순서 붙이고 되었을 경우, 그 순서는 삭제됩니다.
순서는 getServiceProviders
메소드에 의해, 그 useOrdering
인수가 true
의 경우에 사용됩니다.
category
- 우선도를 설정하는 카테고리를 나타내는 Class
오브젝트firstProvider
- 우선되는 프로바이더secondProvider
- firstProvider
가 우선되는 프로바이더
true
IllegalArgumentException
- 프로바이더가 null
인가, 또는 같은 오브젝트의 경우
IllegalArgumentException
- category
에 대응하는 카테고리가 없는 경우public boolean unsetOrdering(Class category, Object firstProvider, Object secondProvider)
false
를 돌려줍니다.
순서는 useOrdering
인수가 true
의 경우에,getServiceProviders
메소드에 의해 사용됩니다.
category
- 우선도의 설정이 해제되는 카테고리를 나타내는 Class
오브젝트firstProvider
- 이전의 우선 프로바이더secondProvider
- firstProvider
가 이전 우선되고 있던 프로바이더
true
IllegalArgumentException
- 프로바이더가 null
인가, 또는 같은 오브젝트의 경우
IllegalArgumentException
- category
에 대응하는 카테고리가 존재하지 않는 경우public void deregisterAll(Class category)
category
- 비우는 카테고리
IllegalArgumentException
- category
에 대응하는 카테고리가 존재하지 않는 경우public void deregisterAll()
public void finalize() throws Throwable
deregisterAll
메소드를 호출해, 현재 등록되어 있는 서비스 프로바이더를 모두 등록 해제합니다. 이 메소드를, 어플리케이션 코드로부터 호출해 되지 않습니다.
Object
내의 finalize
Throwable
- 슈퍼 클래스의 파이나라이즈시에 에러가 발생했을 경우
|
JavaTM 2 Platform Std. Ed. v1. 4.0 |
||||||||||
전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 모든 클래스 | ||||||||||
개요: 상자 | 필드 | constructor | 메소드 | 상세: 필드 | constructor | 메소드 |
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.