因为这个问题有很多命中率。我认为使用SpEL(弹簧表达式语言)指出另一个选项是值得的 - 如果您需要特定属性,可以使用特定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直接注入的属性对象。
将 与索引属性对象一起使用的另一个很好的原因是,一些IDE(例如IntelliJ)可以重构实际的属性名称,如果你在项目中也有.properties文件,这很好。另一个技巧是使用类似EProperties的东西(它扩展了本机Java Properties对象),如果你想在属性文件中进行包含/嵌套/替换而不使用Spring的类(可悲的是,它没有公开其属性 - 要使用SpEL索引,Bean需要成为Java Properties对象的扩展映射的实例)...@Value
PropertiesPlaceholderConfigurer
['key']
Map<>
最后,SpEL的另一个简洁功能是您可以直接访问bean的属性。例如,如果在上面的例子中是一个春天的豆子,例如 然后在AnotherBeanClass中,我们可以拥有;SomeClass
someClass
@Value("#{someClass.someOtherProperty}")
private String injectedBeanProp
您还可以调用 getter 方法:
@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