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.