2010-06-18 1 views
42

Есть ли у кого-нибудь пример использования Google Guice для ввода свойств из файла .properties. Мне сказали, что Гису удалось подтвердить, что все необходимые свойства существуют, когда инжектор запускается.Файлы Guice и свойств

В настоящее время я не могу найти что-либо на вики-визитке об этом.

ответ

67

Вы можете связать свойства, используя 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 выше, автоматически (при условии, что строка соответствует соответствующему формату). Это работает для примитивных типов, перечислений и классных литералов.

+0

NB, используя guice 3.0-rc2 (текущая последняя версия), это работает только если вы импортируете @Named из guice. * Packages, а не javax.inject.Named. –

+0

@ 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

+1

Да, я попробовал - я смотрел эту страницу, потому что у меня был тот же вопрос, что и у OP. Я обнаружил, что специально для случая «булевской» инъекции, я * имел значение, которое я использовал, хотя я признаю, что я далек от эксперта в Guice. –