20161016更新:這貨實際上是SpEL的功能,來這裏看看吧:html
Spring 4 官方文檔學習(五)核心技術之SpELjava
原由mysql
一直的用法是 @Value("${jdbc.driverClass}") 這樣,但在Spring官方文檔裏又看到 @Value("#{a.b}")的用法。git
因而研究了下。spring
結論sql
@Value的值有兩類:app
① ${ property : default_value }ide
② #{ obj.property? : default_value }學習
就是說,第一個注入的是外部參數對應的property,第二個則是SpEL表達式對應的內容。測試
那個 default_value,就是前面的值爲空時的默認值。注意兩者的不一樣。
例子
一、使用STS 新建一個Spring Boot項目,依賴部分留空。
二、在application.properties 文件中添加以下內容:
1 jdbc.driverClass=com.mysql 2 jdbc.url=3306@local 3 jdbc.user=admin 4 jdbc.pwd=pwd
三、新建類ValueDemo,內容以下:
1 package cn.larry.spring; 2 3 import javax.annotation.PostConstruct; 4 5 import org.springframework.beans.factory.annotation.Value; 6 import org.springframework.stereotype.Component; 7 8 @Component 9 public class ValueDemo { 10 @Value("${jdbc.driverClass}") 11 private String driver; 12 13 @PostConstruct 14 public void run(){ 15 System.out.println(driver); 16 } 17 18 }
四、啓動Spring Boot項目,輸出以下:
這就是經常使用的 ${ properties },很簡單。繼續。
五、再新建一個類AnotherObj,內容以下:
1 package cn.larry.spring; 2 3 import org.springframework.beans.factory.annotation.Value; 4 import org.springframework.stereotype.Component; 5 6 @Component 7 public class AnotherObj { 8 @Value("${jdbc.user}") 9 private String name; 10 @Value("${jdbc.pwd}") 11 private String pwd; 12 13 public String getName() { 14 return name; 15 } 16 17 public void setName(String name) { 18 this.name = name; 19 } 20 21 public String getPwd() { 22 return pwd; 23 } 24 25 public void setPwd(String pwd) { 26 this.pwd = pwd; 27 } 28 29 }
六、修改ValueDemo,以下:
1 package cn.larry.spring; 2 3 import javax.annotation.PostConstruct; 4 5 import org.springframework.beans.factory.annotation.Value; 6 import org.springframework.stereotype.Component; 7 8 @Component 9 public class ValueDemo { 10 @Value("${jdbc.driverClass}") 11 private String driver; 12 13 @Value("#{anotherObj.name}") 14 private String name; 15 16 @PostConstruct 17 public void run(){ 18 System.out.println(driver); 19 System.out.println(name); 20 } 21 22 }
七、再次執行Spring Boot項目,結果以下:
這裏展現的是 #{ SpEL }的效果。
八、有意思的是,兩者能夠結合使用,如:#{ '${}' } ,注意單引號,注意不能反過來,測試以下。
application.properties文件中添加一行:media=jdbc.url
ValueDemo類修改以下:
1 package cn.larry.spring; 2 3 import javax.annotation.PostConstruct; 4 5 import org.springframework.beans.factory.annotation.Value; 6 import org.springframework.stereotype.Component; 7 8 @Component 9 public class ValueDemo { 10 @Value("${jdbc.driverClass}") 11 private String driver; 12 13 @Value("#{anotherObj.name}") 14 private String name; 15 16 // @Value("${ '#{anotherObj.media}' }") //這個不支持。 17 @Value("#{ '${media}' }") 18 private String media; 19 20 @PostConstruct 21 public void run(){ 22 System.out.println(driver); 23 System.out.println(name); 24 System.out.println(media); 25 } 26 27 }
九、執行Spring Boot項目,結果以下:
另外,默認值很淺顯,也再也不測試了。
有興趣的能夠自行測試。
放個碼雲的地址上來,但願能幫到一些人。