我看到一個方法標註了@Value("${some.property}")
方法中的@Value註釋是做什麼的?
在
@Value("${some.property}")
public void setSomething(String param) {
... do something with param
}
那是什麼註釋做什麼呢?
我看到一個方法標註了@Value("${some.property}")
方法中的@Value註釋是做什麼的?
在
@Value("${some.property}")
public void setSomething(String param) {
... do something with param
}
那是什麼註釋做什麼呢?
基本上它告訴Spring的AutowiredAnnotationBeanPostProcessor調用setSomething
法的some.property
解析值作爲參數......但只有當你在你的bean定義一個PropertySourcesPlaceholderConfigurer;如果您沒有配置一個後處理器,則只會將字符串"${some.property}"
(不含引號)插入到您的方法中。
如果該值無法解析,則會拋出IllegalArgumentException,除非您使用了默認的例如"${some.property:default}"
。
春天使用當前的Environment及其PropertySources(例如)來解決這些值。 JVM系統屬性,Java屬性文件等
你也可以use Spring Expression Language(SpEL)來解決的事情像#{someBean.someMethod}
或#{systemProperties[user.region]}
旁註:由於文件指出
字段是右後注入在任何 配置方法被調用之前,建造一個bean。 [...] Bean屬性setter方法[在這種情況下]實際上只是這種通用配置方法的特例。
一個常見的錯誤是嘗試使用值注入,但在這一刻的價值還沒有得到解決,也沒有注入,因爲構造函數必須以注入的配置方法值完成在構造函數中執行一些邏輯。在這些情況下,您必須在構造函數參數中使用@Value
或@Autowired
註釋。
您也可以使用@PostConstruct
或XML init-method
屬性指向將在bean屬性設置後執行的方法。或者,您可以實施InitializingBean界面。
這是一個非常好的答案,如果可以的話,我會給它更多的選票。 – ben3000