Spec-Zone.ru › OpenJDK 24

Класс ServiceRegistry

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

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

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

  • 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, содержащий объекты поставщиков услуг в данной категории, удовлетворяющие критерию, заданному методом ServiceRegistry.Filter объекта 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)
Устанавливает парное упорядочение между двумя объектами поставщиков услуг в заданной категории.

Методы, объявленные в классе java.lang.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, если нужно использовать системный загрузчик классов (или, при неудаче, загрузчик 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
Устаревший, для удаления: Этот элемент API может быть удален в будущей версии.
Финализация устарела для удаления. См. Object.finalize() для получения дополнительной информации и подробностей о вариантах миграции.
Завершает работу этого объекта перед сбором мусора. Метод deregisterAll вызывается для дезактивации всех текущих зарегистрированных поставщиков услуг. Этот метод не должен вызываться из кода приложения.
Overrides:
finalize в классе Object
Throws:
Throwable - если при завершении работы предка произошла ошибка.
See Also:
  • WeakReference
  • PhantomReference

© 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

Spec-Zone.ru

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