Класс ServiceRegistry
- Прямые известные подклассы:
IIORegistry
public class ServiceRegistry extends Object
Поставщики служб хранятся в одной или нескольких категориях, каждая из которых определяется классом или интерфейсом (описанным объектом Class), которому должны соответствовать все ее элементы.
Набор категорий, поддерживаемых этим классом, ограничен следующими стандартными типами служб Image I/O:
Попытка загрузить поставщика, не являющегося подтипом одного из перечисленных выше типов, приведет к 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, содержащий объекты поставщиков служб из указанной категории, удовлетворяющие критерию, заданному методом filter объекта ServiceRegistry.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, если следует использовать системный загрузчик классов (или, если он недоступен, загрузчик классов начальной загрузки). - Возвращает:
- Объект
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
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://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/javax/imageio/spi/ServiceRegistry.html