# Guice: Implementierung zur Laufzeit auswählen



## Thomas Darimont (9. Januar 2010)

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.

```
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:

```
ServiceA
ServiceB
```

Gruß Tom


----------



## Michael Kmoch (19. Juli 2010)

Hallo Thomas,
danke für dein Beispiel, klappt super!
Micha


----------

