The Discovery component is about discovering, or finding, implementations for
pluggable interfaces. 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
instantiating classes, and for lifecycle management of singleton (factory)
classes.