Класс ServiceRegistry
- Прямые известные подклассы:
IIORegistry
public class ServiceRegistry extends Object
Поставщики услуг хранятся в одной или нескольких категориях, каждая из которых определяется классом или интерфейсом (описанным объектом Class), которое должны реализовывать все его члены.
Набор категорий, поддерживаемых этим классом, ограничен следующими стандартными типами услуг ввода-вывода изображений:
Попытка загрузить поставщика, который не является подтипом одного из вышеперечисленных типов, приведет к IllegalArgumentException.
Для общего механизма загрузки поставщиков услуг см. ServiceLoader, который является базовым стандартным механизмом, используемым этим классом.
Может быть зарегистрирован только один экземпляр данного листового класса (т. е. фактического класса, возвращаемого getClass(), а не любых наследуемых классов или интерфейсов). Предположим, что класс com.mycompany.mypkg.GreenImageReaderProvider является подклассом класса javax.imageio.spi.ImageReaderSpi. Если зарегистрирован экземпляр класса GreenImageReaderProvider, он будет сохранён в категории, определённой классом ImageReaderSpi. Если зарегистрирован новый экземпляр класса GreenImageReaderProvider, он заменит предыдущий экземпляр. На практике объекты поставщиков услуг обычно являются синглетонами, поэтому такое поведение уместно.
Классы поставщиков услуг должны быть легкими и быстро загружаться. Реализации этих интерфейсов должны избегать сложных зависимостей от других классов и от кода нативных языках. Обычно для более сложных услуг регистрируется лёгкий прокси для тяжёлого сервиса.
Приложение может настраивать содержимое реестра по своему усмотрению, если у него есть соответствующее разрешение времени выполнения.
Для получения информации о том, как создавать и развертывать поставщиков услуг, см. документацию по ServiceLoader
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static interface |
ServiceRegistry.Filter |
Простой интерфейс фильтра, используемый классом ServiceRegistry.getServiceProviders для выбора поставщиков, соответствующих произвольному критерию. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ServiceRegistry |
Создаёт экземпляр ServiceRegistry с набором категорий, взятых из аргумента categories. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
contains |
Возвращает true, если provider в настоящее время зарегистрирован. |
void |
deregisterAll() |
Дерегистрирует все текущие зарегистрированные поставщики услуг из всех категорий. |
void |
deregisterAll |
Дерегистрирует все объекты поставщиков услуг, в настоящее время зарегистрированные в данной категории. |
void |
deregisterServiceProvider |
Удаляет объект поставщика услуг из всех категорий, которые его содержат. |
<T> boolean |
deregisterServiceProvider |
Удаляет объект поставщика услуг из заданной категории. |
void |
finalize() |
Устаревшее, подлежит удалению: Этот элемент API подлежит удалению в будущей версии. Финализация устарела и подлежит удалению. |
Iterator |
getCategories() |
Возвращает Iterator из Class объектов, указывающих текущий набор категорий. |
<T> T |
getServiceProviderByClass |
Возвращает текущий зарегистрированный объект поставщика услуг, который является заданного типа класса. |
<T> Iterator |
getServiceProviders |
Возвращает Iterator, содержащий всех зарегистрированных поставщиков услуг в данной категории. |
<T> Iterator |
getServiceProviders |
Возвращает Iterator, содержащий объекты поставщиков услуг в данной категории, удовлетворяющие критерию, заданному методом ServiceRegistry.Filter объекта filter. |
static <T> Iterator |
lookupProviders |
Находит и поэтапно инициализирует доступных поставщиков заданной службы с использованием контекстного загрузчика классов. |
static <T> Iterator |
lookupProviders |
Ищет реализации определенного класса службы, используя указанный загрузчик классов. |
void |
registerServiceProvider |
Добавляет объект поставщика услуг в реестр. |
<T> boolean |
registerServiceProvider |
Добавляет объект поставщика услуг в реестр. |
void |
registerServiceProviders |
Добавляет набор объектов поставщиков услуг, взятых из Iterator, в реестр. |
<T> boolean |
setOrdering |
Устанавливает парное упорядочение между двумя объектами поставщиков услуг в заданной категории. |
<T> boolean |
unsetOrdering |
Устанавливает парное упорядочение между двумя объектами поставщиков услуг в заданной категории. |
Подробное описание конструкторов
ServiceRegistry
public ServiceRegistry(Iterator<Class<?>> categories)
ServiceRegistry с набором категорий, взятых из аргумента categories. Все категории должны быть членами набора типов сервисов, перечисленных в спецификации класса.- Параметры:
-
categories- объектIterator, содержащий объектыClass, используемые для определения категорий. - Исключения:
-
IllegalArgumentException- еслиcategoriesявляетсяnullили если одна из категорий не является разрешённым типом сервиса.
Подробное описание методов
lookupProviders
public static <T> Iterator<T> lookupProviders(Class<T> providerClass, ClassLoader loader)
Класс сервиса должен быть одним из типов сервисов, перечисленных в спецификации класса. В противном случае будет выброшено исключение IllegalArgumentException.
Этот метод преобразует имя заданного класса сервиса в имя файла конфигурации провайдера, как описано в комментарии к классу, а затем использует метод getResources заданного загрузчика классов для поиска всех доступных файлов с этим именем. Эти файлы затем считываются и парсятся для получения списка имён классов провайдеров. Итератор, который возвращается, использует заданный загрузчик классов для поиска и создания каждого элемента списка.
Поскольку расширения могут быть установлены в работающей виртуальной машине Java, этот метод может возвращать разные результаты при каждом вызове.
- Тип параметров:
T- тип providerClass.- Параметры:
-
providerClass- объектClass, указывающий класс или интерфейс провайдеров сервиса. -
loader- загрузчик классов, используемый для загрузки файлов конфигурации провайдеров и создания экземпляров классов провайдеров, илиnull, если нужно использовать системный загрузчик классов (или, при неудаче, загрузчик Bootstrap). - Возвращает:
- Объект
Iterator, возвращающий объекты провайдеров для данного сервиса в произвольном порядке. Итератор выбросит исключениеError, если файл конфигурации провайдера нарушает указанный формат или если класс провайдера не может быть найден и создан. - Исключения:
-
IllegalArgumentException- еслиproviderClassявляетсяnullили если он не является одним из разрешённых типов сервисов.
lookupProviders
public static <T> Iterator<T> lookupProviders(Class<T> providerClass)
ClassLoader cl = Thread.currentThread().getContextClassLoader(); return Service.providers(service, cl);
Класс сервиса должен быть одним из типов сервисов, перечисленных в спецификации класса. В противном случае будет выброшено исключение IllegalArgumentException.
- Тип параметров:
T- тип providerClass.- Параметры:
-
providerClass- объектClass, указывающий класс или интерфейс провайдеров сервиса. - Возвращает:
- Объект
Iterator, возвращающий объекты провайдеров для данного сервиса в произвольном порядке. Итератор выбросит исключениеError, если файл конфигурации провайдера нарушает указанный формат или если класс провайдера не может быть найден и создан. - Исключения:
-
IllegalArgumentException- еслиproviderClassявляетсяnullили если он не является одним из разрешённых типов сервисов.
getCategories
public Iterator<Class<?>> getCategories()
Iterator объектов Class, указывающих текущий набор категорий. Итератор будет пустым, если категорий нет.- Возвращает:
- объект
Iterator, содержащий объектыClass.
registerServiceProvider
public <T> boolean registerServiceProvider(T provider, Class<T> category)
Если provider реализует интерфейс RegisterableService, будет вызван его метод onRegistration. Его метод onDeregistration будет вызываться каждый раз, когда он отключается от категории, например, если категория удалена или реестр собран мусором.
- Тип параметров:
T- тип провайдера.- Параметры:
-
provider- объект провайдера сервиса, который нужно добавить. -
category- категория, под которой нужно добавить провайдера. - Возвращает:
- true, если ранее не было зарегистрировано ни одного провайдера того же класса в той же категории.
- Исключения:
-
IllegalArgumentException- еслиproviderявляетсяnull. -
IllegalArgumentException- если нет категории, соответствующейcategory. -
ClassCastException- если провайдер не реализует интерфейсClass, определённыйcategory.
registerServiceProvider
public void registerServiceProvider(Object provider)
Если provider реализует интерфейс RegisterableService, его метод onRegistration будет вызываться один раз для каждой категории, под которой он зарегистрирован. Его метод onDeregistration будет вызываться каждый раз, когда он отключается от категории или когда реестр завершается.
- Параметры:
-
provider- объект провайдера сервиса, который нужно добавить. - Исключения:
-
IllegalArgumentException- еслиproviderявляетсяnull.
registerServiceProviders
public void registerServiceProviders(Iterator<?> providers)
Iterator, в реестр. Каждый провайдер ассоциируется с каждой категорией, присутствующей в реестре, реализующей его интерфейс. Для каждого элемента providers, реализующего интерфейс RegisterableService, его метод onRegistration будет вызываться один раз для каждой категории, под которой он зарегистрирован. Его метод onDeregistration будет вызываться каждый раз, когда он отключается от категории или когда реестр завершается.
- Параметры:
-
providers- Итератор, содержащий объекты провайдеров сервиса, которые нужно добавить. - Исключения:
-
IllegalArgumentException- еслиprovidersявляетсяnullили содержит записьnull.
deregisterServiceProvider
public <T> boolean deregisterServiceProvider(T provider, Class<T> category)
false. В противном случае возвращается true. Если зарегистрирован объект того же класса, что и provider, но не равный ему (используя ==) объекту provider, он не будет удалён. Если provider реализует интерфейс RegisterableService, будет вызван его метод onDeregistration.
- Тип параметров:
T- тип провайдера.- Параметры:
-
provider- объект провайдера сервиса, который нужно удалить. -
category- категория, из которой нужно удалить провайдера. - Возвращает:
-
true, если провайдер был ранее зарегистрирован в той же категории,falseв противном случае. - Исключения:
-
IllegalArgumentException- еслиproviderявляетсяnull. -
IllegalArgumentException- если нет категории, соответствующейcategory. -
ClassCastException- если провайдер не реализует класс, определённыйcategory.
deregisterServiceProvider
public void deregisterServiceProvider(Object provider)
- Параметры:
-
provider- объект провайдера сервиса, который нужно удалить. - Исключения:
-
IllegalArgumentException- еслиproviderявляетсяnull.
contains
public boolean contains(Object provider)
true, если provider в настоящее время зарегистрирован.- Параметры:
-
provider- объект провайдера сервиса, который нужно проверить. - Возвращает:
-
true, если заданный провайдер был зарегистрирован. - Исключения:
-
IllegalArgumentException- еслиproviderявляетсяnull.
getServiceProviders
public <T> Iterator<T> getServiceProviders(Class<T> category, boolean useOrdering)
useOrdering имеет значение false, итератор вернёт все объекты поставщиков сервера в произвольном порядке. В противном случае порядок будет соответствовать установленным взаимным упорядочиваниям. Если граф взаимных упорядочиваний содержит циклы, поставщики, принадлежащие циклу, не будут возвращены.- Type Parameters:
T- тип категории.- Parameters:
-
category- категория, подлежащая получению. -
useOrdering-true, если взаимные упорядочивания должны учитываться при упорядочивании возвращаемых объектов. - Returns:
- итератор, содержащий объекты поставщиков услуг из заданной категории, возможно, в определённом порядке.
- Throws:
-
IllegalArgumentException- если нет категории, соответствующейcategory.
getServiceProviders
public <T> Iterator<T> getServiceProviders(Class<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
filter объекта ServiceRegistry.Filter. Аргумент useOrdering управляет порядком результатов, используя те же правила, что и метод getServiceProviders(Class, boolean).
- Type Parameters:
T- тип категории.- Parameters:
-
category- категория, подлежащая получению. -
filter- экземплярServiceRegistry.Filter, методfilterкоторого будет вызван. -
useOrdering-true, если взаимные упорядочивания должны учитываться при упорядочивании возвращаемых объектов. - Returns:
- итератор, содержащий объекты поставщиков услуг из заданной категории, возможно, в определённом порядке.
- Throws:
-
IllegalArgumentException- если нет категории, соответствующейcategory.
getServiceProviderByClass
public <T> T getServiceProviderByClass(Class<T> providerClass)
null.- Type Parameters:
T- тип поставщика.- Parameters:
-
providerClass-Classжелаемого объекта поставщика услуг. - Returns:
- текущий зарегистрированный объект поставщика услуг с нужным типом
Class, илиnull, если такового нет. - Throws:
-
IllegalArgumentException- еслиproviderClassявляетсяnull.
setOrdering
public <T> boolean setOrdering(Class<T> category, T firstProvider, T secondProvider)
false. Если поставщики ранее были упорядочены в обратном порядке, это упорядочивание удаляется. Упорядочивание будет использоваться методами getServiceProviders, когда их аргумент useOrdering равен true.
- Type Parameters:
T- тип категории.- Parameters:
-
category- объектClass, указывающий категорию, в которой должно быть установлено предпочтение. -
firstProvider- предпочтительный поставщик. -
secondProvider- поставщик, которомуfirstProviderпредпочтительнее. - Returns:
-
true, если ранее не установленное упорядочивание было установлено. - Throws:
-
IllegalArgumentException- если любой из поставщиков являетсяnullили они являются одним и тем же объектом. -
IllegalArgumentException- если нет категории, соответствующейcategory.
unsetOrdering
public <T> boolean unsetOrdering(Class<T> category, T firstProvider, T secondProvider)
false. Упорядочивание будет использоваться методами getServiceProviders, когда их аргумент useOrdering равен true.
- Type Parameters:
T- тип категории.- Parameters:
-
category- объектClass, указывающий категорию, в которой должно быть отменено предпочтение. -
firstProvider- ранее предпочтительный поставщик. -
secondProvider- поставщик, которомуfirstProviderбыл ранее предпочтительнее. - Returns:
-
true, если ранее установленное упорядочивание было отменено. - Throws:
-
IllegalArgumentException- если любой из поставщиков являетсяnullили они являются одним и тем же объектом. -
IllegalArgumentException- если нет категории, соответствующейcategory.
deregisterAll
public void deregisterAll(Class<?> category)
- Parameters:
-
category- категория, подлежащая очистке. - Throws:
-
IllegalArgumentException- если нет категории, соответствующейcategory.
deregisterAll
public void deregisterAll()
finalize
@Deprecated(since="9", forRemoval=true) public void finalize() throws Throwable
Object.finalize() для получения дополнительной информации и подробностей о вариантах миграции.deregisterAll вызывается для дезактивации всех текущих зарегистрированных поставщиков услуг. Этот метод не должен вызываться из кода приложения.
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/java.desktop/javax/imageio/spi/ServiceRegistry.html