Поскольку у этого вопроса много обращений. Я подумал, что было бы целесообразно указать на другой вариант с использованием SpEL (Spring Expression Language) - если вам нужны конкретные свойства, они могут быть введены с помощью аннотации @Value для определенных свойств бина;
class SomeClass {
@Value("#{serverProperties['com.svr.prop']}")
private String aServerCfgProperty;
@Value("#{someConfig['another.config.setting']}")
private String someOtherProperty;
}
Вам не нужно использовать синтаксис индексации ['index.val']
, вы можете просто получить его напрямую;
@Value("#{someConfig}")
private Properties someConfig
@Value("#{serverProperties}")
private Properties svrProps;
Я нашел это довольно полезным и отошел от использования объекта свойств, напрямую внедренного через @ Resource / @ Autowired.
Другая хорошая причина для использования @Value
с индексированным объектом Properties состоит в том, что некоторые IDE (например, IntelliJ) могут реорганизовывать фактические имена свойств, если у вас также есть файл .properties в проекте, что приятно. Другой совет - использовать что-то вроде EProperties (что расширяет собственный объект свойств Java), если вы хотите сделать включение / вложение / замену в файлах свойств без использования класса PropertiesPlaceholderConfigurer
Spring (который, к сожалению, не раскрывает его свойства). - для использования индексации SpEL ['key']
компонент должен быть экземпляром Map<>
, т. е. расширять карту, что делает объект свойств Java) ...
Наконец, еще одна полезная функция SpEL - это прямой доступ к свойствам бинов. Скажем, например, если SomeClass
в приведенном выше примере был Spring bean, например someClass
тогда в AnotherBeanClass мы могли бы иметь;
@Value("#{someClass.someOtherProperty}")
private String injectedBeanProp
Вы также можете вызвать метод получения:
@Value("#{someClass.getSomeOtherProperty()}")
private String injectedBeanProp
См. Руководство по SpEL здесь; http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#expressions