Google Guice

Status
Nicht offen für weitere Antworten.

Thomas Lorenz

Bekanntes Mitglied
Servus Gemeinde,

ich tue mich mit Guice etwas schwer. Hoffentlich findet sich jemand, der mir das gut erklären kann.

Bis jetzt habe ich das so verstanden:

Mithilfe des Injector Objekt erzeuge ich eine Instanz der Klasse, in der dann ein benötigtes Objekt einer anderen Klasse injiziert wird.

Also : TestClass test = injector.getInstance(TestClass.class);
(Das injizieren soll in der Klasse TestClass möglich sein)

2. Die Binding-Methode bindet nun das Objekt der Begierde (also jenes, dass ich in der TestClass verwenden möchte) an ein Interface. Auf dieses IF greift nun die TestClass zu und holt sich das gebundene Objekt ab.

3. In der TestClass wird z.B. vor dem Kontruktor die Spritze mit @Inject angesetzt und im Konstruktor erfolgt dann die Zuweisung.

Soweit korrekt ?

Wer hat hier ein wirklich einfaches Beispiel??

Danke
 
B

bygones

Gast
Mithilfe des Injector Objekt erzeuge ich eine Instanz der Klasse, in der dann ein benötigtes Objekt einer anderen Klasse injiziert wird.

Also : TestClass test = injector.getInstance(TestClass.class);
(Das injizieren soll in der Klasse TestClass möglich sein)
ueber den Injector bekommst du sozusagen dein "einstiegsobjekt", alle weiteren Objekte werden dann in diesem Objekt ueber @Inject etc reingereicht

2. Die Binding-Methode bindet nun das Objekt der Begierde (also jenes, dass ich in der TestClass verwenden möchte) an ein Interface. Auf dieses IF greift nun die TestClass zu und holt sich das gebundene Objekt ab.
das Binding bindet eine Klasse (zb als interface) an ihre Implementierung oder an eine konkrete Instanz. Testclass holt sich dann nicht am Interface die Klasse, sondern bekommt ja schon eine Instanz
Java:
public class TestClass {
   private AnyInterface myObject;

   @Inject
   public TestClass(AnyInterface my) {
     myObject = my;
   }

   public void foo() {
      myObject.machWas();
  }
}

Wer hat hier ein wirklich einfaches Beispiel??
ich finde auf der GUICE seite selber schon gute Bsp - oder auch Dependency injection with Guice
 

Thomas Lorenz

Bekanntes Mitglied
Habe nun mal ein Beispiel gefunden und ausprobiert.
Hier habe ich aber kein IF , sondern das MockBooking direkt an die Planer.class angebunden.

Aber es läuft nicht.

Java:
import com.google.inject.Guice;
import com.google.inject.Injector;


public class Urlaubsplanung {
    
    public static void main (String[] args){
	Injector inject = Guice.createInjector(new PlanerModule());
	Planer planer = inject.getInstance(Planer.class);
	
    }

}


import com.google.inject.Binder;
import com.google.inject.Module;


public class PlanerModule implements Module{

    public void configure(Binder binder) {
	binder.bind(MockBooking.class).to(Planer.class);
    }
}





public class MockBooking {
    
    String text ;
    
    public MockBooking(String text){
	this.text = text;
    }




    
    public String getText(){
	return this.text;
    }

}



import com.google.inject.Inject;


public class Planer {

    private final MockBooking mock;
    
    @Inject
    public Planer(MockBooking mock){
	this.mock = mock;
    }
    
    public void getString(){
	System.out.println(mock.getText());
    }
    
}

Die Fehlermeldung lautet :

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method to(Class<? extends MockBooking>) in the type LinkedBindingBuilder<MockBooking> is not applicable for the arguments (Class<Planer>)

at PlanerModule.configure(PlanerModule.java:8)
at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
at com.google.inject.spi.Elements.getElements(Elements.java:101)
at com.google.inject.InjectorShell$Builder.build(InjectorShell.java:135)
at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:102)
at com.google.inject.Guice.createInjector(Guice.java:92)
at com.google.inject.Guice.createInjector(Guice.java:69)
at com.google.inject.Guice.createInjector(Guice.java:59)
at Urlaubsplanung.main(Urlaubsplanung.java:8)


Was der Teil : (Class<? extends MockBooking>) - bedeutet ist mir nicht klar.
 
B

bygones

Gast
[c]binder.bind(MockBooking.class).to(Planer.class);[/c] das macht nicht viel Sinn. Du kannst natuerlich nur zusammenhaengende Klassen binden. MockBooking hat ja nix mit Planer zu tun.

Abgesehen davon dass mich der Name "MockBooking" schon verwirrt (warum ein Mock hier ? und wenn warum nicht ein Mock/Spy Framework dann nehmen ?) musst du beim Klassenbinden eine Instanz angeben
Java:
binder.bind(MockBooking.class).toInstance(new MockBooking("foo"));

das ganze ist aber nicht sinnvoll mit dem Beispiel da MockBooking ein reiner Datenhalter fuer String ist und den braucht man nicht injecten bzw kann man das auch nicht so einfach (wenn text nicht vordefiniert ist).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Downloadfortschritt von Datei über Google Drive API v3 Java Basics - Anfänger-Themen 10
I Java Mail (IMAP -> Empfangen) und Google Mail Java Basics - Anfänger-Themen 1
B Anbindung Clouddienst (Dropbox, Google Drive etc.) Java Basics - Anfänger-Themen 0
D Google maps bild mit marker versehen Java Basics - Anfänger-Themen 12
O Wert in einer URL hinzufügen (in meinem Beispiel Google) Java Basics - Anfänger-Themen 7
I google java-diff-util - Patch abspeichern Java Basics - Anfänger-Themen 1
M JEE und das Google Web Toolkit Java Basics - Anfänger-Themen 2
A Fehlermeldung Unklar, google hilft auch nicht weiter Java Basics - Anfänger-Themen 2
T Klasse für Google-Abfrage Java Basics - Anfänger-Themen 9
L suche geo.google* Java Basics - Anfänger-Themen 20
G Weltkarte a la Google Maps Java Basics - Anfänger-Themen 4
M Suchabfrage an Google Java Basics - Anfänger-Themen 7
N Http-Request : Google Suche Java Basics - Anfänger-Themen 6
G Google Maps und Java Java Basics - Anfänger-Themen 8
C Karte auf Google Earth oder anderen Programmen Java Basics - Anfänger-Themen 6
B Erste Schritte Guice Injection nicht in jeder Klasse möglich Java Basics - Anfänger-Themen 2
G Guice Injection -> Aggregation oder Komposition Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben