Класс 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() |
Устарело. |
Iterator<Class<?>> |
getCategories() |
Возвращает Iterator объектов Class, указывающих текущий набор категорий. |
<T> T |
getServiceProviderByClass |
Возвращает текущий зарегистрированный объект поставщика сервисов данного типа класса. |
<T> Iterator<T> |
getServiceProviders |
Возвращает Iterator, содержащий все зарегистрированные поставщики сервисов в данной категории. |
<T> Iterator<T> |
getServiceProviders |
Возвращает Iterator , содержащий объекты поставщиков сервисов в данной категории, которые удовлетворяют критерию, заданному методом ServiceRegistry.Filter объекта filter. |
static <T> Iterator<T> |
lookupProviders |
Находит и поэтапно создает доступных поставщиков данного сервиса, используя контекстный класс загрузчик. |
static <T> Iterator<T> |
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, используемые для определения категорий. - Исключения:
-
IllegalArgumentException- еслиcategoriesявляетсяnull, или если одна из категорий не является разрешённым типом сервиса.
Подробности методов
lookupProviders
public static <T> Iterator<T> lookupProviders(Class<T> providerClass, ClassLoader loader)
Класс сервиса должен быть одним из типов сервисов, перечисленных в спецификации класса. В противном случае будет брошено исключение IllegalArgumentException.
Этот метод преобразует имя данного класса сервиса в имя файла конфигурации поставщика, как описано в комментарии к классу, а затем использует метод getResources заданного загрузчика классов для поиска всех доступных файлов с таким именем. Эти файлы затем считываются и анализируются для получения списка имён классов поставщиков. Итерируемый объект, который возвращается, использует заданный загрузчик классов для поиска и последующей инициализации каждого элемента списка.
Так как расширения могут быть установлены в работающей виртуальной машине Java, этот метод может возвращать разные результаты при каждом вызове.
- Параметры типа:
-
T- тип providerClass. - Параметры:
-
providerClass- объект, указывающий класс или интерфейс поставщиков сервиса, которые обнаруживаются. -
loader- загрузчик классов, который будет использоваться для загрузки файлов конфигурации поставщиков и инициализации классов поставщиков, илиnull, если нужно использовать системный загрузчик классов (или, если это не возможно, загрузчик базового класса). - Возвращает:
- Итерируемый объект, возвращающий объекты поставщика для данного сервиса в произвольном порядке. Итерируемый объект выбросит исключение
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- объект, указывающий класс или интерфейс поставщиков сервиса, которые обнаруживаются. - Возвращает:
- Итерируемый объект, возвращающий объекты поставщика для данного сервиса в произвольном порядке. Итерируемый объект выбросит исключение
Error, если файл конфигурации поставщика нарушает указанный формат или если класс поставщика не может быть найден и инициализирован. - Исключения:
-
IllegalArgumentException- еслиproviderClassявляетсяnull, или если он не является одним из разрешённых типов сервисов.
getCategories
public Iterator<Class<?>> getCategories()
Class, указывающие текущий набор категорий. Итерируемый объект будет пустым, если категории не существуют.- Возвращает:
- итерируемый объект, содержащий объекты
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, итерируемый объект вернёт все объекты поставщика сервиса в произвольном порядке. В противном случае порядок будет соответствовать любым парным упорядочениям, которые были установлены. Если граф парных упорядочений содержит циклы, поставщики, принадлежащие циклу, не будут возвращены.- Параметры типа:
-
T- тип категории. - Параметры:
-
category- категория, которая должна быть извлечена. -
useOrdering-trueесли нужно учитывать парные упорядочения при упорядочивании возвращаемых объектов. - Возвращает:
- Итерируемый объект, содержащий объекты поставщиков сервиса из заданной категории, возможно, в порядке.
- Исключения:
-
IllegalArgumentException- если нет категории, соответствующейcategory.
getServiceProviders
public <T> Iterator<T> getServiceProviders(Class<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
Iterator, содержащий объекты поставщиков услуг в заданной категории, удовлетворяющие критерию, заданному методом ServiceRegistry.Filter объекта filter. Аргумент useOrdering управляет порядком результатов по тем же правилам, что и getServiceProviders(Class, boolean).
- Type Parameters:
-
T- тип категории. - Parameters:
-
category- категория, подлежащая извлечению. -
filter- экземплярServiceRegistry.Filter, чей методfilterбудет вызван. -
useOrdering-true, если при упорядочивании должны учитываться парные упорядочения. - Returns:
Iterator, содержащий объекты поставщиков услуг из данной категории, возможно, в порядке.- 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") public void finalize() throws Throwable
finalize устарел. Подклассы, переопределяющие finalize для выполнения очистки, должны быть изменены на использование альтернативных механизмов очистки и удаления переопределенного метода finalize. При переопределении метода finalize, его реализация должна явно гарантировать, что super.finalize() вызывается так, как описано в Object.finalize(). См. спецификацию Object.finalize() для получения дополнительной информации об опциях миграции.deregisterAll вызывается для дерегистрации всех текущих зарегистрированных поставщиков услуг. Этот метод не должен вызываться из кода приложения.- Overrides:
-
finalizeв классеObject - Throws:
-
Throwable- если при финализации суперкласса произошла ошибка. - See Also:
© 1993, 2021, 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/17/docs/api/java.desktop/javax/imageio/spi/ServiceRegistry.html
finalizeустарел.