Guice - Ohne injector.getInstance

  • Themenstarter Themenstarter Newbie0815
  • Beginndatum Beginndatum
N

Newbie0815

Gast
Hallo,
ich möchte ein Anwendung bestehen die aus mehreren Modulen besteht. Allerdings läuft diese ohne ServletContainer. Jetzt habe ich viel über GUICE gelesen stoße aber immer wieder auf ein Problem das ich eigentlich nicht haben möchte.. In der Main steht zum Beispiel immer folgendes:

Java:
public static main(String[] args) {
    MyModule module = new  MyModule();  
    Injector anotherInjector = Guice.createInjector(module);  

    Customer customer = anotherInjector.getInstance(Customer.class);  
    customer.changeSomething();  
}
Nun möchte ich Guice zwar einmalig bei Start mit dem Module konfigurieren, aber im späteren Verlauf die Objekte nicht jedes mal mit "injector.getInstance" abfragen sondern möchte das dies automatisch beim Zugriff auf Objekte geschieht. Ich möchte also nur einmal beim Starten der Anwendung den Injector instanzieren und anschließend in allen weiteren Objekten automatisch die per Annotation nötigen Klassen injeziert bekommen. Ist dies möglich? Soweit ich es verstanden habe macht das Playframework mit Guice genau dies, aber wie? Play framework - guice

Ich wäre für jeden Tipp sehr dankbar!
 
Zumeist werden Felder von Objekten injiziert (vie Konstruktor, Setter oder direkt). Das geschieht dann, wenn es gezielt aufgerufen wird (injector.inject oder sowas) oder wenn das Objekt selber von Guice benötigt wird. Wenn du also ein Objekt weit oben in deiner Objekt-Hierarchie hast (nicht Klassen-Hierarchie) und das von Guice erstellen lässt, dann löst es die Abhängigkeiten aus, die du per @Inject festgelegt hast, holt sich die Klassen bzw. instanziiert sie usw. An dem Punkt, an dem du allerdings dein eigenes Objekt erzeugst oder es manuell irgendwo her holst, geht das nicht mehr (und auch dein minimales Beispiel geht wohl nicht anders). Anderenfalls hast du ein Objekt, in dem du ein Customer-Objekt brauchst und das kannst du dort als Feld angeben und injizieren, dann musst du das nicht explizit holen. Dann musst du allerdings das Objekt injizieren oder es muss selber durch Guice zur Verfügung gestellt werden.

Ich glaube, ich hab das kein bisschen rüberbringen können. Mein Text ist quasi s*****e 😀 Aber ich habe grad keinen Plan, wie ich das besser formuliere. Lies dich im Zweifelsfall einfach mal tiefer in die Materie ein, Tutorials erklären das bestimmt besser. Oder vielleicht habe ich dein Problem auch missverstanden...
 
Guice ist ein DI-Framework und macht genau das, was du benötigst/willst. Die Objekte die du brauchst, lässt du dir injecten und brauchst somit eigentl. keinen Aufruf von [c]new[/c] mehr. Ein kleines Tutorial zu Guice findest du übrigens auch hier im Forum:
http://www.java-forum.org/blogs/the_29/29-dependency-code-injection-google-guice.html
[edit]
ok. Habe mir nochmal das tutorial angeschaut von the_29. Es geht hier leider nicht auf das ein, nachdem du gefragt hast. Es bleibt dir aber immernoch der Link zum Wiki von Guice
[/edit]

Auf der Seite von Guice gibt es ein recht großes Wiki, das du mal anschauen kannst.
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben