2014-02-14 37 views

回答

20

基本上它告訴Spring的AutowiredAnnotationBeanPostProcessor調用setSomething法的some.property解析值作爲參數......但只有當你在你的bean定義一個PropertySourcesPlaceholderConfigurer;如果您沒有配置一個後處理器,則只會將字符串"${some.property}"(不含引號)插入到您的方法中。

如果該值無法解析,則會拋出IllegalArgumentException,除非您使用了默認的例如"${some.property:default}"

春天使用當前的Environment及其PropertySources(例如)來解決這些值。 JVM系統屬性,Java屬性文件等

你也可以use Spring Expression LanguageSpEL)來解決的事情像#{someBean.someMethod}#{systemProperties[user.region]}

旁註:由於文件指出

字段是右後注入在任何 配置方法被調用之前,建造一個bean。 [...] Bean屬性setter方法[在這種情況下]實際上只是這種通用配置方法的特例。

一個常見的錯誤是嘗試使用值注入,但在這一刻的價值還沒有得到解決,也沒有注入,因爲構造函數必須以注入的配置方法值完成在構造函數中執行一些邏輯。在這些情況下,您必須在構造函數參數中使用@Value@Autowired註釋。

您也可以使用@PostConstruct或XML init-method屬性指向將在bean屬性設置後執行的方法。或者,您可以實施InitializingBean界面。

+1

這是一個非常好的答案,如果可以的話,我會給它更多的選票。 – ben3000

相關問題