Spec-Zone .ru
спецификации, руководства, описания, API
|
public class ServiceRegistry extends Object
Служба является известным набором интерфейсов и (обычно краткий обзор) классы. Поставщик услуг является определенной реализацией службы. Классы в провайдере обычно реализуют интерфейс или разделяют на подклассы класс, определенный службой непосредственно.
Поставщики услуг сохранены в одной или более категориях, каждая из которых определяется классом интерфейса (описанный a Class
объект), который должны реализовать все его элементы. Набор категорий может быть изменен динамически.
Только единственный экземпляр данного листового класса (то есть, фактический класс, возвращенный getClass()
, в противоположность любым наследованным классам или интерфейсам), может быть зарегистрирован. Таким образом, предположите что com.mycompany.mypkg.GreenServiceProvider
класс реализует com.mycompany.mypkg.MyService
интерфейс. Если a GreenServiceProvider
экземпляр регистрируется, он будет сохранен в категории, определенной MyService
класс. Если новый экземпляр GreenServiceProvider
регистрируется, это заменит предыдущий экземпляр. Практически, объекты поставщика услуг обычно являются одиночными элементами, таким образом, это поведение является соответствующим.
Объявить поставщика услуг, a services
подкаталог помещается в пределах META-INF
каталог, который присутствует в каждом файле JAR. Этот каталог содержит файл для каждого интерфейса поставщика услуг, у которого есть один или более классов реализации, существующих в файле JAR. Например, если файл JAR, содержавший класс, называют com.mycompany.mypkg.MyServiceImpl
который реализует javax.someapi.SomeService
интерфейс, файл JAR содержал бы названный файл:
META-INF/services/javax.someapi.SomeServiceсодержа строку:
com.mycompany.mypkg.MyService
Классы поставщика услуг должны быть должны быть легкими и быстрыми, чтобы загрузиться. Реализации этих интерфейсов должны избежать сложных зависимостей от других классов и от собственного кода. Обычный образец для более сложных служб должен зарегистрировать легкий прокси для тяжелой службы.
Приложение может настроить содержание реестра, как оно считает целесообразным, пока у него есть соответствующее разрешение времени выполнения.
Для получения дополнительной информации при объявлении поставщиков услуг, и формата JAR вообще, см. Спецификацию Файла JAR.
RegisterableService
Модификатор и Тип | Класс и Описание |
---|---|
static interface |
ServiceRegistry. Фильтр
Простой интерфейс фильтра, используемый
ServiceRegistry.getServiceProviders выбрать провайдеров, соответствующих произвольный критерий. |
Конструктор и Описание |
---|
ServiceRegistry(Iterator<Class<?>> categories)
Конструкции a
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()
Завершает этот объект до сборки "мусора".
|
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)
Устанавливает попарное упорядочивание между двумя объектами поставщика услуг в пределах данной категории.
|
public ServiceRegistry(Iterator<Class<?>> categories)
ServiceRegistry
экземпляр с рядом категорий, взятых от categories
параметр.categories
- Iterator
содержа Class
объекты, которые будут использоваться, чтобы определить категории.IllegalArgumentException
- если categories
null
.public static <T> Iterator<T> lookupProviders(Class<T> providerClass, ClassLoader loader)
Этот метод преобразовывает имя данного класса службы в имя файла конфигурации провайдера как описано в комментарии класса и затем использует getResources
метод данного загрузчика класса, чтобы найти все доступные файлы с тем именем. Эти файлы тогда читаются и анализируются, чтобы произвести список имен классов провайдера. iterator, который возвращается, использует данный загрузчик класса, чтобы искать и затем инстанцировать каждого элемента списка.
Поскольку для расширений возможно быть установленным в рабочую виртуальную машину Java, этот метод может возвратить различные результаты каждый раз, когда это вызывается.
providerClass
- a Class
объект, указывающий на класс или интерфейс обнаруживаемых поставщиков услуг.loader
- загрузчик класса, который будет использоваться, чтобы загрузить конфигурационные файлы провайдера и инстанцировать классов провайдера, или null
если системный загрузчик класса (или, приводя к сбою, что загрузчик класса начальной загрузки) должен использоваться.Iterator
это приводит к объектам провайдера для данной службы в некотором произвольном порядке. iterator бросит Error
если конфигурационный файл провайдера нарушает указанный формат или если класс провайдера не может быть найден и инстанцирован.IllegalArgumentException
- если providerClass
null
.public static <T> Iterator<T> lookupProviders(Class<T> providerClass)
ClassLoader cl = Thread.currentThread().getContextClassLoader(); return Service.providers(service, cl);
providerClass
- a Class
объект, указывающий на класс или интерфейс обнаруживаемых поставщиков услуг.Iterator
это приводит к объектам провайдера для данной службы в некотором произвольном порядке. iterator бросит Error
если конфигурационный файл провайдера нарушает указанный формат или если класс провайдера не может быть найден и инстанцирован.IllegalArgumentException
- если providerClass
null
.public Iterator<Class<?>> getCategories()
Iterator
из Class
объекты, указывающие на текущий набор категорий. iterator будет пуст, если никакие категории не будут существовать.Iterator
содержа Class
объекты.public <T> boolean registerServiceProvider(T provider, Class<T> category)
Если provider
реализации RegisterableService
интерфейс, onRegistration
метод вызовут. onDeregistration
метод вызовут каждый раз, когда он вычеркивается из списка от категории, например если категория удаляется, или реестр собирается "мусор".
provider
- служба обеспечивает объект, который будет зарегистрирован.category
- категория, под которой можно зарегистрировать провайдера.IllegalArgumentException
- если provider
null
.IllegalArgumentException
- если нет никакого соответствия категории category
.ClassCastException
- если провайдер не реализует Class
определенный category
.public void registerServiceProvider(Object provider)
Class
это реализует. Если provider
реализации RegisterableService
интерфейс, onRegistration
однажды метод вызовут для каждой категории, под которой он регистрируется. onDeregistration
метод вызовут каждый раз, когда он вычеркивается из списка от категории или когда реестр завершается.
provider
- объект поставщика услуг, который будет зарегистрирован.IllegalArgumentException
- если provider
null
.public void registerServiceProviders(Iterator<?> providers)
Iterator
к реестру. Каждый провайдер связывается в пределах каждой категории, существующей в реестре чей Class
это реализует. Для каждой записи providers
это реализует RegisterableService
интерфейс, onRegistration
однажды метод вызовут для каждой категории, под которой он регистрируется. onDeregistration
метод вызовут каждый раз, когда он вычеркивается из списка от категории или когда реестр завершается.
providers
- Iterator, содержащий поставщика услуг, возражает, чтобы быть зарегистрированным.IllegalArgumentException
- если providers
null
или содержит a null
запись.public <T> boolean deregisterServiceProvider(T provider, Class<T> category)
false
возвращается. Иначе, true
возвращается. Если объект того же самого класса как provider
но не равный (использование ==
) к provider
регистрируется, это не будет вычеркнуто из списка. Если provider
реализации RegisterableService
интерфейс, onDeregistration
метод вызовут.
provider
- объект поставщика услуг, который будет вычеркнут из списка.category
- категория, от которой можно вычеркнуть из списка провайдера.true
если провайдер был ранее зарегистрирован в той же самой категории категории, false
иначе.IllegalArgumentException
- если provider
null
.IllegalArgumentException
- если нет никакого соответствия категории category
.ClassCastException
- если провайдер не реализует класс, определенный category
.public void deregisterServiceProvider(Object provider)
provider
- объект поставщика услуг, который будет вычеркнут из списка.IllegalArgumentException
- если provider
null
.public boolean contains(Object provider)
true
если provider
в настоящий момент регистрируется.provider
- объект поставщика услуг, который будет запрошен.true
если данный провайдер был зарегистрирован.IllegalArgumentException
- если provider
null
.public <T> Iterator<T> getServiceProviders(Class<T> category, boolean useOrdering)
Iterator
содержа всех зарегистрированных поставщиков услуг в данной категории. Если useOrdering
false
, iterator возвратит все объекты провайдера сервера в произвольном порядке. Иначе, упорядочивание будет уважать любые попарные упорядочивания, которые были установлены. Если график попарных упорядочиваний будет содержать циклы, то любые провайдеры, которые принадлежат циклу, не будут возвращены.category
- категория, которая будет получена от.useOrdering
- true
если попарные упорядочивания должны быть приняты во внимание в упорядочивании возвращенных объектов.Iterator
содержа поставщика услуг возражает от данной категории, возможно в порядке.IllegalArgumentException
- если нет никакого соответствия категории category
.public <T> Iterator<T> getServiceProviders(Class<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
Iterator
содержа поставщика услуг возражает в пределах данной категории, которые удовлетворяют критерий, наложенный предоставленным ServiceRegistry.Filter
объект filter
метод. useOrdering
параметр управляет упорядочиванием результатов, используя те же самые правила как getServiceProviders(Class, boolean)
.
category
- категория, которая будет получена от.filter
- экземпляр ServiceRegistry.Filter
чей filter
метод будет вызван.useOrdering
- true
если попарные упорядочивания должны быть приняты во внимание в упорядочивании возвращенных объектов.Iterator
содержа поставщика услуг возражает от данной категории, возможно в порядке.IllegalArgumentException
- если нет никакого соответствия категории category
.public <T> T getServiceProviderByClass(Class<T> providerClass)
null
возвращается.providerClass
- Class
из требуемого объекта поставщика услуг.Class
введите, или null
не ни один, присутствует.IllegalArgumentException
- если providerClass
null
.public <T> boolean setOrdering(Class<T> category, T firstProvider, T secondProvider)
false
возвращается. Если провайдеры ранее были упорядочены в обратном направлении, то упорядочивание удаляется. Упорядочивание будет использоваться getServiceProviders
методы, когда их useOrdering
параметр true
.
category
- a Class
объект, указывающий на категорию, под которой должно быть установлено предпочтение.firstProvider
- привилегированный провайдер.secondProvider
- провайдер тот, к который firstProvider
предпочитается.true
если ранее упорядочивание сброса было установлено.IllegalArgumentException
- если любой провайдер null
или они - тот же самый объект.IllegalArgumentException
- если нет никакого соответствия категории category
.public <T> boolean unsetOrdering(Class<T> category, T firstProvider, T secondProvider)
false
возвращается. Упорядочивание будет использоваться getServiceProviders
методы, когда их useOrdering
параметр true
.
category
- a Class
объект, указывающий на категорию, под которой должно быть отменено предпочтение.firstProvider
- прежде привилегированный провайдер.secondProvider
- провайдер тот, к который firstProvider
был прежде предпочтен.true
если ранее упорядочивание набора было отменено.IllegalArgumentException
- если любой провайдер null
или они - тот же самый объект.IllegalArgumentException
- если нет никакого соответствия категории category
.public void deregisterAll(Class<?> category)
category
- категория, которая будет освобождена.IllegalArgumentException
- если нет никакого соответствия категории category
.public void deregisterAll()
public void finalize() throws Throwable
deregisterAll
метод вызывают, чтобы вычеркнуть из списка всех в настоящий момент зарегистрированных поставщиков услуг. Этот метод нельзя вызвать от кода программы.
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.