Файлы Guice и свойства

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

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


person benstpierre    schedule 18.06.2010    source источник


Ответы (1)


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

person ColinD    schedule 18.06.2010
comment
NB, используя guice 3.0-rc2 (текущая последняя версия), это работает, только если вы импортируете @Named из пакетов guice. *, А не javax.inject.Named. - person Matthew Gilliard; 19.02.2011
comment
@ mjg123: Это не должно быть правдой ... Я сам реализовал функцию, которая делает Guice @Named и @javax.inject.Named взаимозаменяемыми. См. Тест здесь, который включает тест, который работает с Names.bindProperties. Ты пробовал это? - person ColinD; 19.02.2011
comment
Да, я пробовал - я смотрел эту страницу, потому что у меня был тот же вопрос, что и у OP. Я обнаружил, что конкретно в случае boolean инъекции имело значение, что я использовал, хотя, признаюсь, я далек от эксперта в Guice. - person Matthew Gilliard; 02.03.2011
comment
@ mjg123: Я просто попробовал еще раз сам, используя @javax.inject.Named и приведенный выше пример (с bindProperties), и все работало нормально. Если в какой-то ситуации вам нужно использовать Guice @Named, не могли бы вы провести небольшой тест, который выявляет это, и сообщить об этом здесь? - person ColinD; 02.03.2011
comment
конечно, если я смогу воспроизвести это, я опубликую новый вопрос. - person Matthew Gilliard; 02.03.2011