Pluggable interfaces are specified with the intent that
multiple implementations are, or will be,
available to provide the service described by the interface.
Discovery provides facilities for finding and intantiating classes,
and for lifecycle management of singleton (factory) classes.
In the absence of a common service for discoverying interface
implementations, many components have pioneered design and
implementation principles for self-discovery
(i.e. JAXP, commons-logging, others).
The Commons Discovery component seeks to stand on the shoulders
of it's predecessors by extracting the essential principles and
making them available to both end user developers and to facilitate
self-discovery for those components that would provide such services
through their own APIs.
The Commons Discovery Component improves over previous implementations
by establishing facilities for working within managed environments.
These allow configuration and property overrides without appealing
to the global System properties (which are scoped across an entire JVM).