由于这个问题有很多次。我认为使用SpEL(Spring表达式语言)指出另一个选项是值得的 - 如果您需要特定的属性,可以使用特定的bean属性上的@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直接注入的属性对象。
使用带索引Properties对象的@Value
的另一个好理由是,如果项目中的.properties文件很好,某些IDE(例如IntelliJ)可以重构实际的属性名称。另一个技巧是使用类似EProperties(它扩展了本地Java属性对象),如果你想在属性文件中进行包含/嵌套/替换,而不使用Spring的PropertiesPlaceholderConfigurer
类(可悲的是不公开它的属性 - 使用SpEL索引['key']
bean需要成为Map<>
的一个实例,即Java属性对象所做的扩展映射)...
最后,SpEL的另一个很好的特性是可以直接访问bean的属性。因此,举例来说,如果上述示例中的SomeClass
是Spring bean,例如someClass
然后在AnotherBeanClass中我们可以有;
@Value("#{someClass.someOtherProperty}")
private String injectedBeanProp
你也可以调用一个getter方法:
@Value("#{someClass.getSomeOtherProperty()}")
private String injectedBeanProp
看到这里的规划环境地政司指导; http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#expressions
感谢您的信息和代码示例! Works – NightWolf