Вы можете связать свойства, используя Names.bindProperties(binder(), getProperties())
, где getProperties
возвращает Properties
объект или Map<String, String>
(чтение файла свойств как Properties
объект до вас).
Затем вы можете ввести их по имени, используя @Named
. Если у вас файл свойств:
foo=bar
baz=true
Вы можете вводить значения этих свойств в любом месте вы хотите, как это:
@Inject
public SomeClass(@Named("foo") String foo, @Named("baz") boolean baz) {...}
Guice может преобразовывать значения из строки в тип впрыскивается, например, boolean
выше, автоматически (при условии, что строка соответствует соответствующему формату). Это работает для примитивных типов, перечислений и классных литералов.
NB, используя guice 3.0-rc2 (текущая последняя версия), это работает только если вы импортируете @Named из guice. * Packages, а не javax.inject.Named. –
@ mjg123: Это не должно быть правдой ... Я реализовал функцию, которая делает меня сменой Guice '@ Named' и' @ javax.inject.Named'. См. Тест [здесь] (http://code.google.com/p/google-guice/source/browse/trunk/core/test/com/google/inject/name/NamedEquivalanceTest.java), который включает в себя тест что это работает с 'Names.bindProperties'. Ты это пробовал? – ColinD
Да, я попробовал - я смотрел эту страницу, потому что у меня был тот же вопрос, что и у OP. Я обнаружил, что специально для случая «булевской» инъекции, я * имел значение, которое я использовал, хотя я признаю, что я далек от эксперта в Guice. –