ServiceLoader
can be used to get instances of classes extending a given type(=service) that are specified in a file packed in a .jar
file. The service that is extended/implemented is often a interface, but this is not required.
The extending/implementing classes need to provide a zero argument constructor for the ServiceLoader
to instantiate them.
To be discovered by the ServiceLoader
a text file with the name of the fully qualified type name of the implemented service needs to be stored inside the META-INF/services
directory in the jar file. This file contains one fully qualified name of a class implementing the service per line.