Lifetime Management mit Google Guice

8

Gibt es ein empfohlenes Muster zum Herunterfahren / Schließen von Objekten, die mit Guice erstellt wurden?

Der Lebenszyklus, den ich anstrebe, ist:

  1. Bereiten Sie ein Guice-Modul
  2. vor
  3. Erstellen Sie einen Injektor
  4. Verwenden Sie den Injektor über Ihren Code, um Objekte ( injector.getInstance(Foo.class) )
  5. zu erhalten
  6. ...
  7. Schließen Sie alle Ressourcen, die von diesen Objekten gehalten werden (Dateihandles, TCP-Verbindungen usw.). Ich möchte, dass dies ein deterministischer Schritt ist (nicht "eines Tages, an dem der GC läuft").
ripper234 04.11.2009, 14:49
quelle

1 Antwort

2
  

Ich möchte, dass dies ein deterministischer Schritt ist (nicht "eines Tages, an dem der GC läuft").

Tut mir leid, aber Java ist die falsche Sprache für dich. Das DI-Framework weiß nicht, wann alle Referenzen auf ein Objekt weg sind. Nur der GC weiß das.

Wenn Sie eine "schließbare" Ressource haben, verwenden Sie das try / finally-Muster, um es zu schließen (siehe unten).

%Vor%

Jetzt, um etwas zu hausieren. Guice kann wissen, wann ein Bereich beginnt und endet. Ihr benutzerdefinierter Bereich könnte nach Abschluss des Vorgangs einen Bereinigungsschritt ausführen. Dieser Bereich könnte sogar Proxys zurückgeben, so dass die Objekte ungültig wären, wenn Sie versuchen würden, auf sie außerhalb des zulässigen Bereichs zuzugreifen.

(Oh und +1 bis ColinD - Provider injizieren.:)

BEARBEITEN : Guiceyfruit scheint Unterstützung für Lebenszyklen

    
Michael Lloyd Lee mlk 05.11.2009 10:25
quelle