Base interface for Geotools factories (i.e. service discovery).
This interfaces forms the core of the Geotools plug-in system, by which capabilities
can be added to the library at runtime. Each sub-interface defines a service.
Most services are set up with concrete implementation being registered for use in
a service registry, which acts as a container for service implementations.
Service registries don't need to be a Geotools implementation. They can be (but are not
limited to) any
ServiceRegistry subclass. If the standard
ServiceRegistry(or its Geotools extension
FactoryRegistry) is selected as a container for services,
then factory implementations should be declared as below (select only one way):
- Register for automatic discovery
- Provide a public no-arguments constructor.
- Add the fully qualified name of the implementation class in the
META-INF/services/classname file where classname
is the fully qualified name of the service interface.
- The factory implementations will be discovered when
FactoryRegistry#scanForPlugins will be invoked.
- Or register explicitly by application code
- Invoke
ServiceRegistry#registerServiceProvider in application code.
In addition, it is recommended that implementations provide a constructor expecting
a single
Hints argument. This optional argument gives to the user some control
of the factory's low-level details. The amount of control is factory specific. The geotools
library defines a global class called
Hints that is ment as API (i.e. you can assume
these hints are supported). Factories may also provide information on their own custom hints
as part of their javadoc class description.
Examples:
An application supplied a
Hints#DATUM_FACTORY, being
passed to a
org.opengis.referencing.datum.DatumAuthorityFactory so that all datum created from an authority code will come from the supplied datum
factory.
An application supplied a
org.geotools.feature.FeatureFactory (ensuring all
constructed features support the Eclipse's
IAdaptable interface), being passed to a
org.geotools.feature.FeatureTypeFactory so that all
FeatureTypesconstructed will produce features supporting the indicated interface.
As seen in those examples this concept of a hint becomes more interesting when
the operation being controlled is discovery of other services used by the Factory.
By supplying appropriate hints one can chain together several factories and retarget
them to an application specific task.