由於這個問題有很多次。我認爲使用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