Класс 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- еслиcategoriesnull, или если одна из категорий не является допустимым типом сервиса.
Краткое описание методов
lookupProviders
public static <T> Iterator<T> lookupProviders(Class<T> providerClass, ClassLoader loader)
Класс сервиса должен быть одним из типов сервисов, перечисленных в спецификации класса. В противном случае будет выброшено исключение IllegalArgumentException.
Этот метод преобразует имя заданного класса сервиса в имя файла конфигурации поставщика, как описано в комментарии к классу, а затем использует метод getResources заданного загрузчика классов для поиска всех доступных файлов с этим именем. Затем эти файлы считываются и анализируются для получения списка имен классов поставщиков. Итератор, который возвращается, использует заданный загрузчик классов для поиска и последующего создания экземпляра каждого элемента списка.
Поскольку возможно установить расширения в работающую виртуальную машину Java, этот метод может возвращать разные результаты при каждом вызове.
- Параметры типа:
-
T- тип providerClass. - Параметры:
-
providerClass- объектClass, указывающий класс или интерфейс служб, которые обнаруживаются. -
loader- загрузчик классов, который будет использоваться для загрузки файлов конфигурации поставщика и создания экземпляров классов поставщика, илиnull, если должен использоваться системный загрузчик классов (или, если это невозможно, загрузчик классов загрузки). - Возвращает:
- Объект
Iterator, который возвращает объекты поставщика для данной службы в произвольном порядке. Итератор выбросит исключениеError, если файл конфигурации поставщика нарушает указанный формат или если класс поставщика не может быть найден и создан экземпляр. - Исключения:
-
IllegalArgumentException- еслиproviderClassnull, или если это не один из допустимых типов служб.
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- еслиproviderClassnull, или если это не один из допустимых типов служб.
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- еслиprovidernull. -
IllegalArgumentException- если нет категории, соответствующейcategory. -
ClassCastException- если поставщик не реализуетClass, определенныйcategory.
registerServiceProvider
public void registerServiceProvider(Object provider)
Class, который он реализует. Если provider реализует интерфейс RegisterableService, его метод onRegistration будет вызван один раз для каждой категории, в которой он зарегистрирован. Его метод onDeregistration будет вызываться каждый раз, когда он отменяется регистрация из категории или когда реестр завершается.
- Параметры:
-
provider- объект поставщика услуг, который необходимо зарегистрировать. - Исключения:
-
IllegalArgumentException- еслиprovidernull.
registerServiceProviders
public void registerServiceProviders(Iterator<?> providers)
Iterator, в реестр. Каждый поставщик связан с каждой категорией, присутствующей в реестре, Class, который он реализует. Для каждой записи providers, которая реализует интерфейс RegisterableService, его метод onRegistration будет вызван один раз для каждой категории, в которой он зарегистрирован. Его метод onDeregistration будет вызываться каждый раз, когда он отменяется регистрация из категории или когда реестр завершается.
- Параметры:
-
providers- итератор, содержащий объекты поставщиков услуг, которые необходимо зарегистрировать. - Исключения:
-
IllegalArgumentException- еслиprovidersnullили содержит записьnull.
deregisterServiceProvider
public <T> boolean deregisterServiceProvider(T provider, Class<T> category)
false. В противном случае возвращается true. Если зарегистрирован объект того же класса, что и provider, но не равный (используя ==) provider, он не будет отменен регистрация. Если provider реализует интерфейс RegisterableService, будет вызван его метод onDeregistration.
- Параметры типа:
-
T- тип поставщика. - Параметры:
-
provider- объект поставщика услуг, который необходимо отменить регистрацию. -
category- категория, из которой необходимо отменить регистрацию поставщика. - Возвращает:
-
trueесли поставщик был ранее зарегистрирован в той же категории,falseв противном случае. - Исключения:
-
IllegalArgumentException- еслиprovidernull. -
IllegalArgumentException- если нет категории, соответствующейcategory. -
ClassCastException- если поставщик не реализует класс, определенныйcategory.
deregisterServiceProvider
public void deregisterServiceProvider(Object provider)
- Параметры:
-
provider- объект поставщика услуг, который необходимо отменить регистрацию. - Исключения:
-
IllegalArgumentException- еслиprovidernull.
contains
public boolean contains(Object provider)
true, если provider в данный момент зарегистрирован.- Параметры:
-
provider- объект поставщика услуг, который необходимо запросить. - Возвращает:
-
trueесли данный поставщик был зарегистрирован. - Исключения:
-
IllegalArgumentException- еслиprovidernull.
getServiceProviders
public <T> Iterator<T> getServiceProviders(Class<T> category, boolean useOrdering)
Iterator, содержащий все зарегистрированные поставщики услуг в данной категории. Если useOrdering false, итератор вернет все объекты поставщика сервера в произвольном порядке. В противном случае порядок будет соответствовать любым попарным порядкам, которые были установлены. Если граф попарных порядков содержит циклы, никакие поставщики, принадлежащие циклу, не будут возвращены.- Параметры типа:
-
T- тип категории. - Параметры:
-
category- категория, из которой необходимо получить. -
useOrdering-true, если попарные порядки следует учитывать при упорядочивании возвращаемых объектов. - Возвращает:
- объект
Iterator, содержащий объекты поставщиков услуг из данной категории, возможно, в порядке. - Исключения:
-
IllegalArgumentException- если нет категории, соответствующейcategory.
Получить поставщиков услуг
public <T> Iterator<T> getServiceProviders(Class<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
ServiceRegistry.Filter.
Аргумент useOrdering управляет упорядочиванием результатов по тем же правилам, что и getServiceProviders(Class, boolean).
- Параметры типа:
-
T- тип категории. - Параметры:
-
category- категория, из которой нужно получить поставщиков услуг. -
filter- экземплярServiceRegistry.Filter, методfilterкоторого будет вызван. -
useOrdering-true, если нужно учитывать порядок парных сравнений при упорядочивании возвращаемых объектов. - Возвращаемое значение:
- Список объектов поставщиков услуг из заданной категории, возможно, отсортированных.
- Исключения:
-
IllegalArgumentException- если категория, соответствующаяcategory, не найдена.
Получить поставщика услуг по классу
public <T> T getServiceProviderByClass(Class<T> providerClass)
null.
- Параметры типа:
-
T- тип поставщика. - Параметры:
-
providerClass- класс желаемого объекта поставщика услуг. - Возвращаемое значение:
- Зарегистрированный объект поставщика услуг с нужным типом класса, или
null, если такой объект отсутствует. - Исключения:
-
IllegalArgumentException- еслиproviderClassравенnull.
Установить порядок
public <T> boolean setOrdering(Class<T> category, T firstProvider, T secondProvider)
false. Если поставщики ранее были упорядочены в обратном порядке, этот порядок удаляется.
Порядок будет использоваться методами getServiceProviders когда их аргумент useOrdering равен true.
- Параметры типа:
-
T- тип категории. - Параметры:
-
category- объект, указывающий категорию, в которой нужно установить предпочтение. -
firstProvider- предпочтительный поставщик. -
secondProvider- поставщик, которомуfirstProviderпредпочтительнее. - Возвращаемое значение:
-
trueесли ранее не заданный порядок был установлен. - Исключения:
-
IllegalArgumentException- если любой из поставщиковnullили они представляют собой один и тот же объект. -
IllegalArgumentException- если категория, соответствующаяcategory, не найдена.
Снять порядок
public <T> boolean unsetOrdering(Class<T> category, T firstProvider, T secondProvider)
false.
Порядок будет использоваться методами getServiceProviders когда их аргумент useOrdering равен true.
- Параметры типа:
-
T- тип категории. - Параметры:
-
category- объект, указывающий категорию, из которой нужно удалить предпочтение. -
firstProvider- ранее предпочтительный поставщик. -
secondProvider- поставщик, которомуfirstProviderранее был предпочтительнее. - Возвращаемое значение:
-
trueесли ранее установленный порядок был снят. - Исключения:
-
IllegalArgumentException- если любой из поставщиковnullили они представляют собой один и тот же объект. -
IllegalArgumentException- если категория, соответствующаяcategory, не найдена.
Дезарегистрировать все
public void deregisterAll(Class<?> category)
- Параметры:
-
category- категория, которую нужно очистить. - Исключения:
-
IllegalArgumentException- если категория, соответствующаяcategory, не найдена.
Дезарегистрировать все
public void deregisterAll()
finalize
@Deprecated(since="9", forRemoval=true) public void finalize() throws Throwable
Object.finalize() для получения дополнительной информации и деталей по вариантам миграции.deregisterAll для дерегистрации всех зарегистрированных поставщиков услуг. Этот метод не следует вызывать из прикладного кода.- Переопределяет:
-
finalizeв классеObject - Исключения:
-
Throwable- если произошла ошибка при финализации предка. - См. также:
© 1993, 2023, 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/21/docs/api/java.desktop/javax/imageio/spi/ServiceRegistry.html