Auf Thema antworten

Du machst ein Interface z.B. [c]com.example.foo.ServiceA[/c] und in dem externen Modul machst du dann eine entsprechende Implementierung des Interfaces. Um deinem Hauptprogramm dann die Implementierung bekannt zu machen, erzeugst du in "META-INF/services" eine Datei mit dem CanonicalName (also Classname + Package-Path "com.example.foo.ServiceA") als Dateinamen und schreibst den CanonicalName der Implementierung rein.


Um dann die entsprechenden Implementierungen zu holen (es könnte ja mehr als ein Modul eine Implementierung mitbringen):

[code=Java]ServiceLoader<ServiceA> serviceLoader = ServiceLoader.load(ServiceA.class)

for (ServiceA service : serviceLoader ) {

  // do something with the implementation

}[/code]


Die einzige Voraussetzung ist: Die Service-Implementierung benötigt einen Zero-Arg Constructor, damit der ServiceLoader sie instanziieren kann.



Oben