Java How To
 


Service-Provider-Interface in Java 6

How To ...

Dynamisches Laden und Verwenden von Services.

Hintergründe

Seit Version 6 enthält Java-SE die Klasse ServiceLoader, die die Verwaltung von Services vereinfacht. Ein Service wird allgemein als Interface oder abstrakte Klasse definiert. Verschiedene Implementierungen können über die Deklaration in einer Datei publiziert werden. Über den ServiceLoader wird auf die Implementierungen zugegriffen.

So geht's

Erstellen des Dienstes als Interface oder abstrakte Klasse

    public interface SomeService {
        public String upperCaseString(String str);
    }
		

Entwicklung einer oder mehrerer implementierender Klassen, den Providern

    public class MySpecialService implements SomeService {
        @Override
        public String upperCaseString(String str) {
            return str.toUpperCase();
        }
    }
		

Deklaration der Provider in der Datei META-INF/services/<Interface-Name>

    de.javahowto.java6.serviceloader.MySpecialService
		

Verwendung: Die Methode load(<Interface>) liefert alle registrierten Provider

    ServiceLoader<SomeService> loader = ServiceLoader.load(SomeService.class);
    for (SomeService provider : loader) {
        // hier gibt es nur einen, ansonsten gewünschten bestimmen
        System.out.println(provider.upperCaseString("Ein Test"));
    }