javax.imageio.spi
public class ServiceRegistry extends Object
Since: 1.4
Nested Class Summary | |
---|---|
static interface | ServiceRegistry.Filter
A filter for selecting service providers that match custom
criteria.
|
Constructor Summary | |
---|---|
ServiceRegistry(Iterator<Class<?>> categories)
Constructs a ServiceRegistry for the specified
service categories.
|
Method Summary | |
---|---|
boolean | contains(Object provider)
Determines whether a provider has been registered with this
registry.
|
void | deregisterAll(Class<?> category)
De-registers all providers which have been registered for the
specified service category.
|
void | deregisterAll()
De-registers all service providers.
|
<T> boolean | deregisterServiceProvider(T provider, Class<T> category)
De-registers a provider for the specified service category.
|
void | deregisterServiceProvider(Object provider)
De-registers a provider from all service categories it
implements.
|
void | finalize()
Called by the Virtual Machine when it detects that this
ServiceRegistry has become garbage. |
Iterator<Class<?>> | getCategories()
Returns an iterator over all service categories.
|
<T> T | getServiceProviderByClass(Class<T> providerClass)
Returns one of the service providers that is a subclass of the
specified class.
|
<T> Iterator<T> | getServiceProviders(Class<T> category, boolean useOrdering)
Retrieves all providers that have been registered for the
specified service category.
|
<T> Iterator<T> | getServiceProviders(Class<T> category, ServiceRegistry.Filter filter, boolean useOrdering)
Retrieves all providers that have been registered for the
specified service category and that satisfy the criteria
of a custom filter.
|
static <T> Iterator<T> | lookupProviders(Class<T> spi, ClassLoader loader)
Finds service providers that are implementing the specified
Service Provider Interface.
|
static <T> Iterator<T> | lookupProviders(Class<T> spi)
Finds service providers that are implementing the specified
Service Provider Interface, using the context class loader
for loading providers.
|
<T> boolean | registerServiceProvider(T provider, Class<T> category)
Registers a provider for the specified service category.
|
void | registerServiceProvider(Object provider)
Registers a provider under all service categories it
implements.
|
void | registerServiceProviders(Iterator<?> providers)
Registers a number of providers under all service categories they
implement.
|
<T> boolean | setOrdering(Class<T> category, T firstProvider, T secondProvider)
Adds an ordering constraint on service providers.
|
<T> boolean | unsetOrdering(Class<T> category, T firstProvider, T secondProvider)
Removes an ordering constraint on service providers.
|
ServiceRegistry
for the specified
service categories.
Parameters: categories the categories to support
Throws: IllegalArgumentException if categories
is
null
, or if its {@link Iterator#next()} method
returns null
.
ClassCastException if categories
does not
iterate over instances of {@link java.lang.Class}.
Returns: true
if provider
has been
registered under any service category; false
if
it is not registered.
Throws: IllegalArgumentException if provider
is
null
.
If a provider implements the {@link RegisterableService}
interface, its {@link RegisterableService#onDeregistration
onDeregistration} method is invoked in order to inform the
provider about the removal from this registry. If the provider
implements several service categories,
onDeregistration
gets called multiple times.
Parameters: category the category whose registered providers will be de-registered.
Throws: IllegalArgumentException if category
is not
among the categories passed to the {@linkplain
#ServiceRegistry(Iterator) constructor} of this
ServiceRegistry
.
If a provider implements the {@link RegisterableService}
interface, its {@link RegisterableService#onDeregistration
onDeregistration} method is invoked in order to inform the
provider about the removal from this registry. If the provider
implements several service categories,
onDeregistration
gets called multiple times.
If provider
implements the {@link
RegisterableService} interface, its {@link
RegisterableService#onDeregistration onDeregistration} method is
invoked in order to inform the provider about the removal from
this registry.
Parameters: provider the service provider to be de-registered.
category the service category from which
provider
shall be de-registered.
Returns: true
if provider
was previously
registered for the specified service category; false
if if the provider had not been registered.
Throws: IllegalArgumentException if provider
is
null
, or if category
is not among the
categories passed to the {@linkplain #ServiceRegistry(Iterator)
constructor} of this ServiceRegistry.
ClassCastException if provider
does not
implement category
.
If provider
implements the {@link
RegisterableService} interface, its {@link
RegisterableService#onDeregistration onDeregistration} method is
invoked in order to inform the provider about the removal from
this registry. If provider
implements several
service categories, onDeregistration
gets called
multiple times.
Parameters: provider the service provider to be de-registered.
Throws: IllegalArgumentException if provider
is
null
, or if provider
does not implement
any of the service categories passed to the {@linkplain
#ServiceRegistry(Iterator) constructor} of this
ServiceRegistry
.
ServiceRegistry
has become garbage. De-registers all
service providers, which will cause those that implement {@link
RegisterableService} to receive a {@link
RegisterableService#onDeregistration onDeregistration}
notification.Returns: an unmodifiable {@link java.util.Iterator}<{@link java.lang.Class}>.
Parameters: providerClass a class to search for.
Parameters: category the service category whose providers are
to be retrieved.
useOrdering true
in order to retrieve the
providers in an order imposed by the {@linkplain #setOrdering
ordering constraints}; false
in order to retrieve
the providers in any order.
Throws: IllegalArgumentException if category
is not
among the categories passed to the {@linkplain
#ServiceRegistry(Iterator) constructor} of this
ServiceRegistry
.
See Also: ServiceRegistry
Parameters: category the service category whose providers are
to be retrieved.
filter a custom filter, or null
to
retrieve all registered providers for the specified
category.
useOrdering true
in order to retrieve the
providers in an order imposed by the {@linkplain #setOrdering
ordering constraints}; false
in order to retrieve
the providers in any order.
Throws: IllegalArgumentException if category
is not
among the categories passed to the {@linkplain
#ServiceRegistry(Iterator) constructor} of this
ServiceRegistry
.
On-demand loading: Loading and initializing service providers is delayed as much as possible. The rationale is that typical clients will iterate through the set of installed service providers until one is found that matches some criteria (like supported formats, or quality of service). In such scenarios, it might make sense to install only the frequently needed service providers on the local machine. More exotic providers can be put onto a server; the server will only be contacted when no suitable service could be found locally.
Security considerations: Any loaded service providers
are loaded through the specified ClassLoader, or the system
ClassLoader if classLoader
is
null
. When lookupProviders
is called,
the current {@link java.security.AccessControlContext} gets
recorded. This captured security context will determine the
permissions when services get loaded via the next()
method of the returned Iterator
.
Parameters: spi the service provider interface which must be
implemented by any loaded service providers.
loader the class loader that will be used to load the
service providers, or null
for the system class
loader. For using the context class loader, see {@link
#lookupProviders(Class)}.
Returns: an iterator over instances of spi
.
Throws: IllegalArgumentException if spi
is
null
.
Parameters: spi the service provider interface which must be implemented by any loaded service providers.
Returns: an iterator over instances of spi
.
Throws: IllegalArgumentException if spi
is
null
.
See Also: ServiceRegistry
If provider
implements the {@link
RegisterableService} interface, its {@link
RegisterableService#onRegistration onRegistration} method is
invoked in order to inform the provider about the addition to
this registry.
Parameters: provider the service provider to be registered.
category the service category under which
provider
shall be registered.
Returns: true
if provider
is the first
provider that gets registered for the specified service category;
false
if other providers have already been
registered for the same servide category.
Throws: IllegalArgumentException if provider
is
null
, or if category
is not among the
categories passed to the {@linkplain #ServiceRegistry(Iterator)
constructor} of this ServiceRegistry.
ClassCastException if provider
does not
implement category
.
If provider
implements the {@link
RegisterableService} interface, its {@link
RegisterableService#onRegistration onRegistration} method is
invoked in order to inform the provider about the addition to
this registry. If provider
implements several
service categories, onRegistration
gets called
multiple times.
Parameters: provider the service provider to be registered.
Throws: IllegalArgumentException if provider
is
null
, or if provider
does not implement
any of the service categories passed to the {@linkplain
#ServiceRegistry(Iterator) constructor} of this ServiceRegistry.
If a provider implements the {@link RegisterableService}
interface, its {@link RegisterableService#onRegistration
onRegistration} method is invoked in order to inform the provider
about the addition to this registry. If provider
implements several service categories,
onRegistration
gets called multiple times.
Throws: IllegalArgumentException if providers
is
null
, if any iterated provider is null
,
or if some iterated provider does not implement any of the
service categories passed to the {@linkplain
#ServiceRegistry(Iterator) constructor} of this
ServiceRegistry
.
Parameters: category the service category to which an ordering
constraint is to be added.
first the provider which is supposed to come before
second
.
second the provider which is supposed to come after
first
.
Throws: IllegalArgumentException if first
and
second
are referring to the same object, or if one
of them is null
.
See Also: ServiceRegistry ServiceRegistry
Parameters: category the service category from which an ordering
constraint is to be removed.
first the provider which is supposed to come before
second
.
second the provider which is supposed to come after
first
.
Throws: IllegalArgumentException if first
and
second
are referring to the same object, or if one
of them is null
.
See Also: ServiceRegistry