Thomas Darimont
Erfahrenes Mitglied
Hallo,
hier mal ein Beispiel, wie man die Implementierung eines Services innerhalb einer Guice Anwendung zur Laufzeit wählen kann (beispielsweise durch Einstellungen an der Oberfläche etc.)
Dabei kann der Service A oder B über eine externe Quelle ausgewählt werden.
Ausgabe:
Gruß Tom
hier mal ein Beispiel, wie man die Implementierung eines Services innerhalb einer Guice Anwendung zur Laufzeit wählen kann (beispielsweise durch Einstellungen an der Oberfläche etc.)
Dabei kann der Service A oder B über eine externe Quelle ausgewählt werden.
Java:
package de.tutorials;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.name.Names;
public class GuiceChooseInstanceAtRuntimeExample {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new ServiceModule());
IService service = injector.getInstance(Key.get(IService.class, Names.named("A")));
service.op();
service = injector.getInstance(Key.get(IService.class, Names.named("B")));
service.op();
}
static class ServiceModule extends AbstractModule {
protected void configure() {
bind(IService.class).annotatedWith(Names.named("A")).to(ServiceA.class);
bind(IService.class).annotatedWith(Names.named("B")).to(ServiceB.class);
}
}
static interface IService {
void op();
}
static class Service implements IService{
public void op() {
System.out.println(getClass().getSimpleName());
}
}
static class ServiceA extends Service{}
static class ServiceB extends Service{}
}
Ausgabe:
Code:
ServiceA
ServiceB
Gruß Tom