È possibile associare proprietà utilizzando Names.bindProperties(binder(), getProperties())
, dove getProperties
restituisce un oggetto o un Properties
Map<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.
NB, utilizzando guice 3.0-rc2 (l'ultima versione corrente), funziona solo se si importa @Named dal guice. * Pacchetti, non javax.inject.Named. –
@ 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
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. –