Plugin Schnittstelle mit dem Java ServiceLoader umsetzen
Viele moderne Anwendungen verfügen heutzutage über Plugin Schnittstellen. Solche Schnittstellen ermöglichen es, die jeweilige Anwendungen zu erweitern, ohne die Hauptanwendungen selbst anzupassen. Java bringt standardmäßig den ServiceLoader mit, um solche Plugin Schnittstellen umzusetzen.
Anwendung implementieren
Für die Plugin Schnittstelle wird zunächst ein Interface benötigt, das von den Plugins implementiert werden muss:
package extensible;
public interface Plugin {
String getName();
}
Dann wird noch eine Einstiegsklasse benötigt und schon ist die erweiterbare Anwendung fertig:
package extensible;
import java.util.ServiceLoader;
public class ExtensibleApplication {
public static void main(final String[] args) {
ServiceLoader.load(Plugin.class).forEach(plugin -> {
System.out.println(plugin.getName());
});
}
}
Plugin implementieren
Nach der Anwendung folgt nun die Implementierung eines Plugins. Hierzu wird ein neues Projekt mit folgender Klasse erstellt:
package extension;
public class HelloWorldPlugin implements Plugin {
@Override
public String getName() {
return "HelloWorld";
}
}
Damit das Plugin vom ServiceLoader geladen wird, muss im Ordner META-INF\services eine Datei mit dem vollqualifizierten Namen des Plugin Interface angelegt werden (hier extensible.Plugin). In diese Datei wird nun der vollqualifizierte Name des Plugins eingetragen (hier extension.HelloWorldPlugin). Es können auch mehrere Plugins eingetragen werden.
Ausführen der Anwendung
Nun kann die Anwendung inklusive Plugin ausgeführt werden. Dazu wird das Plugin für gewöhnlich als JAR Datei verpackt und beim Start der Anwendung mit in den classpath aufgenommen. Wenn alles korrekt implementiert und gestartet wurde, sollte die Anwendung
HelloWorld
auf der Kommandozeile ausgeben.