Spec-Zone.ru › OpenJDK 25

Класс ServiceRegistry

java.lang.Object
javax.imageio.spi.ServiceRegistry
Прямые известные подклассы:
IIORegistry
public class ServiceRegistry extends Object
Реестр экземпляров поставщиков служб для типов служб Image I/O.

Поставщики служб хранятся в одной или нескольких категориях, каждая из которых определяется классом или интерфейсом (описанным объектом Class), которому должны соответствовать все ее элементы.

Набор категорий, поддерживаемых этим классом, ограничен следующими стандартными типами служб Image I/O:

  • ImageInputStreamSpi
  • ImageOutputStreamSpi
  • ImageReaderSpi
  • ImageTranscoderSpi
  • ImageWriterSpi

Попытка загрузить поставщика, не являющегося подтипом одного из перечисленных выше типов, приведет к IllegalArgumentException.

Общий механизм загрузки поставщиков служб описан в ServiceLoader — это базовый стандартный механизм, используемый данным классом.

Можно зарегистрировать только один экземпляр заданного конечного класса (то есть фактического класса, возвращаемого getClass(), а не любого унаследованного класса или интерфейса). Предположим, что класс com.mycompany.mypkg.GreenImageReaderProvider является подклассом javax.imageio.spi.ImageReaderSpi. Если зарегистрировать экземпляр GreenImageReaderProvider, он будет сохранен в категории, определенной классом ImageReaderSpi. Если зарегистрировать новый экземпляр GreenImageReaderProvider, он заменит предыдущий экземпляр. На практике объекты поставщиков служб обычно являются одиночками, поэтому такое поведение вполне уместно.

Классы поставщиков служб должны быть легковесными и быстро загружаться. Реализациям этих интерфейсов следует избегать сложных зависимостей от других классов и от машинного кода. Для более сложных служб обычно регистрируют легковесный прокси-объект для ресурсоемкой службы.

Приложение может настраивать содержимое реестра по своему усмотрению при наличии соответствующего разрешения времени выполнения.

Сведения о создании и развертывании поставщиков служб см. в документации по ServiceLoader

См. также:
  • RegisterableService
  • ServiceLoader

Краткое описание вложенных классов

Модификатор и тип Класс Описание
static interface  ServiceRegistry.Filter
Простой интерфейс фильтра, используемый ServiceRegistry.getServiceProviders для выбора поставщиков, соответствующих произвольному критерию.

Краткое описание конструкторов

Конструктор Описание
ServiceRegistry(Iterator<Class<?>> categories)
Создает экземпляр ServiceRegistry с набором категорий, взятых из аргумента categories.

Краткое описание методов

Модификатор и тип Метод Описание
boolean contains(Object provider)
Возвращает true, если provider зарегистрирован в данный момент.
void deregisterAll()
Отменяет регистрацию всех зарегистрированных на данный момент поставщиков служб во всех категориях.
void deregisterAll(Class<?> category)
Отменяет регистрацию всех объектов поставщиков служб, зарегистрированных в указанной категории.
void deregisterServiceProvider(Object provider)
Удаляет объект поставщика служб из всех категорий, в которых он содержится.
<T> boolean deregisterServiceProvider(T provider, Class<T> category)
Удаляет объект поставщика служб из указанной категории.
void finalize()
Устарел и будет удален: этот элемент API подлежит удалению в будущей версии.
Финализация признана устаревшей и будет удалена.
Iterator<Class<?>> getCategories()
Возвращает Iterator объектов Class, представляющий текущий набор категорий.
<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)
Возвращает Iterator, содержащий объекты поставщиков служб из указанной категории, удовлетворяющие критерию, заданному методом filter объекта ServiceRegistry.Filter.
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)
Задает попарный порядок между двумя объектами поставщиков служб в указанной категории.
<T> boolean unsetOrdering(Class<T> category, T firstProvider, T secondProvider)
Задает попарный порядок между двумя объектами поставщиков служб в указанной категории.

Методы, объявленные в классе Object

clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

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, если следует использовать системный загрузчик классов (или, если он недоступен, загрузчик классов начальной загрузки).
Возвращает:
Объект 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)
Добавляет объект поставщика службы в реестр. Поставщик связывается с каждой присутствующей в реестре категорией, Class которой он реализует.

Если provider реализует интерфейс RegisterableService, его метод onRegistration будет вызван один раз для каждой категории, в которой он зарегистрирован. Метод onDeregistration будет вызываться каждый раз при отмене его регистрации в категории или при финализации реестра.

Параметры:
provider — объект поставщика службы для регистрации.
Исключения:
IllegalArgumentException — если provider равен null.

registerServiceProviders

public void registerServiceProviders(Iterator<?> providers)
Добавляет в реестр набор объектов поставщиков службы, полученных из Iterator. Каждый поставщик связывается с каждой присутствующей в реестре категорией, Class которой он реализует.

Для каждой записи providers, реализующей интерфейс RegisterableService, метод onRegistration будет вызван один раз для каждой категории, в которой она зарегистрирована. Метод onDeregistration будет вызываться каждый раз при отмене ее регистрации в категории или при финализации реестра.

Параметры:
providers — Iterator, содержащий объекты поставщиков службы для регистрации.
Исключения:
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)
Возвращает объект Iterator, содержащий всех зарегистрированных поставщиков службы указанной категории. Если useOrdering равен false, итератор вернет все объекты поставщиков службы в произвольном порядке. В противном случае порядок будет учитывать заданные попарные упорядочивания. Если граф попарных упорядочиваний содержит циклы, поставщики, входящие в цикл, возвращены не будут.
Параметры типа:
T — тип категории.
Параметры:
category — категория, для которой выполняется запрос.
useOrdering — true, если при упорядочивании возвращаемых объектов следует учитывать попарные упорядочивания.
Возвращает:
объект Iterator, содержащий объекты поставщиков службы из указанной категории, возможно, упорядоченные.
Исключения:
IllegalArgumentException — если категории, соответствующей category, не существует.

getServiceProviders

public <T> Iterator<T> getServiceProviders(Class<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
Возвращает объект Iterator, содержащий объекты поставщиков службы из указанной категории, которые удовлетворяют критерию, заданному методом filter объекта ServiceRegistry.Filter.

Аргумент useOrdering управляет порядком результатов по тем же правилам, что и getServiceProviders(Class, boolean).

Параметры типа:
T — тип категории.
Параметры:
category — категория, для которой выполняется запрос.
filter — экземпляр ServiceRegistry.Filter, метод filter которого будет вызван.
useOrdering — true, если при упорядочивании возвращаемых объектов следует учитывать попарные упорядочивания.
Возвращает:
объект Iterator, содержащий объекты поставщиков службы из указанной категории, возможно, упорядоченные.
Исключения:
IllegalArgumentException — если категории, соответствующей category, не существует.

getServiceProviderByClass

public <T> T getServiceProviderByClass(Class<T> providerClass)
Возвращает зарегистрированный в данный момент объект поставщика службы, принадлежащий к указанному типу класса. Одновременно может быть зарегистрирован не более чем один объект данного класса. Если зарегистрированного объекта нужного типа класса нет, возвращается null.
Параметры типа:
T — тип поставщика.
Параметры:
providerClass — Class нужного объекта поставщика службы.
Возвращает:
зарегистрированный в данный момент объект поставщика службы нужного типа Class или null, если такой объект отсутствует.
Исключения:
IllegalArgumentException — если providerClass равен null.

setOrdering

public <T> boolean setOrdering(Class<T> category, T firstProvider, T secondProvider)
Устанавливает попарный порядок между двумя объектами поставщиков услуг в заданной категории. Если один или оба объекта в данный момент не зарегистрированы в заданной категории или требуемый порядок уже установлен, ничего не происходит и возвращается false. Если ранее поставщики были упорядочены в обратном направлении, этот порядок удаляется.

Этот порядок будет использоваться методами getServiceProviders, если их аргумент useOrdering равен true.

Параметры типа:
T — тип категории.
Параметры:
category — объект Class, указывающий категорию, для которой устанавливается предпочтительный порядок.
firstProvider — предпочтительный поставщик.
secondProvider — поставщик, которому отдаётся предпочтение перед firstProvider.
Возвращает:
true, если был установлен ранее не заданный порядок.
Вызывает исключения:
IllegalArgumentException — если любой из поставщиков равен null или они являются одним и тем же объектом.
IllegalArgumentException — если категория, соответствующая category, отсутствует.

unsetOrdering

public <T> boolean unsetOrdering(Class<T> category, T firstProvider, T secondProvider)
Устанавливает попарный порядок между двумя объектами поставщиков услуг в заданной категории. Если один или оба объекта в данный момент не зарегистрированы в заданной категории или между ними сейчас не установлен порядок, ничего не происходит и возвращается false.

Этот порядок будет использоваться методами getServiceProviders, если их аргумент useOrdering равен true.

Параметры типа:
T — тип категории.
Параметры:
category — объект Class, указывающий категорию, для которой отменяется предпочтительный порядок.
firstProvider — поставщик, которому ранее отдавалось предпочтение.
secondProvider — поставщик, которому ранее отдавалось предпочтение перед firstProvider.
Возвращает:
true, если ранее установленный порядок был отменён.
Вызывает исключения:
IllegalArgumentException — если любой из поставщиков равен null или они являются одним и тем же объектом.
IllegalArgumentException — если категория, соответствующая category, отсутствует.

deregisterAll

public void deregisterAll(Class<?> category)
Отменяет регистрацию всех объектов поставщиков услуг, зарегистрированных в заданной категории.
Параметры:
category — категория, регистрацию в которой необходимо отменить.
Вызывает исключения:
IllegalArgumentException — если категория, соответствующая category, отсутствует.

deregisterAll

public void deregisterAll()
Отменяет регистрацию всех зарегистрированных поставщиков услуг во всех категориях.

finalize

@Deprecated(since="9", forRemoval=true) public void finalize() throws Throwable
Устарело и будет удалено: этот элемент API планируется удалить в будущей версии.
Метод завершения работы устарел и будет удалён. Сведения о причинах и вариантах миграции см. в разделе Object.finalize().
Завершает работу этого объекта перед сборкой мусора. Для отмены регистрации всех зарегистрированных поставщиков услуг вызывается метод deregisterAll. Этот метод не следует вызывать из кода приложения.
Переопределяет:
finalize в классе Object
Вызывает исключения:
Throwable — если при завершении работы суперкласса возникает ошибка.
См. также:
  • WeakReference
  • PhantomReference

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/javax/imageio/spi/ServiceRegistry.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API