2010-06-18 13 views
42

Hat jemand ein Beispiel dafür, wie Google Guice zum Eingeben von Eigenschaften aus einer .properties-Datei verwendet werden kann. Mir wurde gesagt, Guice konnte bestätigen, dass alle benötigten Eigenschaften vorhanden sind, wenn der Injektor startet.Guice- und Eigenschaftendateien

Zu dieser Zeit kann ich nichts über das Guice Wiki darüber finden.

Antwort

67

Sie können Eigenschaften binden Names.bindProperties(binder(), getProperties()) verwenden, wo getProperties gibt ein Properties Objekt oder eine Map<String, String> (Lesen Sie die Eigenschaftendatei als ein Properties Objekt bis zu Ihnen).

Sie können sie dann mit Namen unter Verwendung @Named injizieren. Wenn Sie eine Eigenschaften hatte Datei:

foo=bar 
baz=true 

Sie könnten die Werte dieser Eigenschaften überall spritzen wollte man, wie folgt aus:

@Inject 
public SomeClass(@Named("foo") String foo, @Named("baz") boolean baz) {...} 

Guice Werte von den Saiten auf den Typ umwandeln kann eingespritzt, wie die boolean oben, automatisch (vorausgesetzt, die Zeichenfolge ist ein passendes Format). Dies funktioniert für primitive Typen, Enums und Klassenliterale.

+0

NB, mit guice 3.0-rc2 (aktuelle neueste Version) funktioniert dies nur, wenn Sie @ Named aus den Paketen guice. * Importieren, nicht javax.inject.Named. –

+0

@ mjg123: Das sollte nicht wahr sein ... Ich habe die Funktion implementiert, die Guice '@ Named' und' @ javax.inject.Named' selbst austauschbar macht. Sehen Sie den Test [hier] (http://code.google.com/p/google-guice/source/browse/trunk/core/test/com/google/inject/name/NamedEquivalanceTest.java), der einen Test enthält das funktioniert mit 'Names.bindProperties'. Hast du es versucht? – ColinD

+1

Ja, ich habe es versucht - ich schaute auf diese Seite, weil ich die gleiche Frage hatte wie das OP. Ich fand, dass speziell für den Fall der "booleschen" Injektion, es * wichtig war, was ich verwendete, obwohl ich zugeben muss, dass ich weit von einem Experten in Guice entfernt bin. –