2010-06-18 9 views
42

Qualcuno ha un esempio di come utilizzare Google Guice per iniettare le proprietà da un file .properties. Mi è stato detto che Guice è stata in grado di convalidare che tutte le proprietà necessarie sono presenti all'avvio dell'iniettore.File di dati e proprietà

In questo momento non riesco a trovare nulla sul wiki di Guice su questo.

risposta

67

È possibile associare proprietà utilizzando Names.bindProperties(binder(), getProperties()), dove getProperties restituisce un oggetto o un PropertiesMap<String, String> (leggere il file delle proprietà di un oggetto Properties dipende da voi).

È quindi possibile iniettarli per nome utilizzando @Named. Se tu avessi un file di proprietà:

foo=bar 
baz=true 

Si potrebbe iniettare i valori di tali proprietà ovunque si voleva, in questo modo:

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

Guice in grado di convertire i valori da stringhe al tipo di essere iniettato, come ad esempio il boolean sopra, automaticamente (assumendo che la stringa sia un formato appropriato). Funziona per tipi primitivi, enumerazioni e letterali di classe.

+0

NB, utilizzando guice 3.0-rc2 (l'ultima versione corrente), funziona solo se si importa @Named dal guice. * Pacchetti, non javax.inject.Named. –

+0

@ mjg123: Non dovrebbe essere vero ... Ho implementato la funzione che rende Guice '@ Named' e' @ javax.inject.Named' intercambiabili io stesso. Guarda il test [qui] (http://code.google.com/p/google-guice/source/browse/trunk/core/test/com/google/inject/name/NamedEquivalanceTest.java), che include un test questo funziona con 'Names.bindProperties'. L'hai provato? – ColinD

+1

Sì, l'ho provato - stavo guardando questa pagina perché avevo la stessa domanda dell'OP. Ho trovato che, in particolare per il caso dell'iniezione "booleana", era una questione che usavo, anche se ammetto che sono lontano da un esperto in Guice. –

Problemi correlati