1. 程式人生 > >Spring @Value 用法小結,#與$的區別

Spring @Value 用法小結,#與$的區別

文章轉載自:http://www.cnblogs.com/larryzeal/p/5910149.html

起因

一直的用法是 @Value("${jdbc.driverClass}") 這樣,但在Spring官方文件裡又看到 @Value("#{a.b}")的用法。

於是研究了下。

結論

@Value的值有兩類:

① ${ property : default_value }

② #{ obj.property? : default_value }

就是說,第一個注入的是外部引數對應的property,第二個則是SpEL表示式對應的內容。

那個 default_value,就是前面的值為空時的預設值。注意二者的不同。

例子

1、使用STS 新建一個Spring Boot專案,依賴部分留空。

2、在application.properties 檔案中新增如下內容:

1 jdbc.driverClass=com.mysql
2 [email protected]
3 jdbc.user=admin
4 jdbc.pwd=pwd

3、新建類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 }
複製程式碼

4、啟動Spring Boot專案,輸出如下:

這就是常用的 ${ properties },很簡單。繼續。

5、再新建一個類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 }
複製程式碼

6、修改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 }
複製程式碼

7、再次執行Spring Boot專案,結果如下:

這裡展示的是 #{ SpEL }的效果。

8、有意思的是,二者可以結合使用,如:#{ '${}' } ,注意單引號,注意不能反過來,測試如下。

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 }
複製程式碼

9、執行Spring Boot專案,結果如下:

另外,預設值很淺顯,也不再測試了

相關推薦

Spring @Value 用法小結#$的區別

文章轉載自:http://www.cnblogs.com/larryzeal/p/5910149.html 起因 一直的用法是 @Value("${jdbc.driverClass}") 這樣,但在Spring官方文件裡又看到 @Value("#{a.b}")的用法。 於

ffmpeg用法小結教你抓各大網站視訊

最近受邀朋友幫忙需要抓取一段某酷電影,偶然間發現ffmpeg程式。說到此可能會有人提到you-get和youtube-dl,期間也接觸了該兩款程式,但是由於版權原因,該軟體僅僅可以抓取前幾分鐘預覽版,作為程式猿F12除錯工具我們必不可少的工具,終於發現了新大陸(get.json)期間很多群友以及感興趣的朋友一

spring @Value 用法

首先,@value需要引數,這裡引數可以是兩種形式: 1、@Value("#{configProperties['t1.msgname']}") SpEL表示式:通常用來獲取bean的屬性,或者呼叫b

jstl標籤forEach用法小結後臺接收表單(字串和陣列)

對於在頁面上顯示大量資料庫查詢出來的內容時,有必要使用jstl的迴圈語句forEach。 先從後臺查詢:List<Map<String,Object>> systemNameList = sendPowerService.getAllSystemNa

Spring和SpringBoot比較解惑區別

except super pat cWeb () frame XML tid 慢慢 1、概述:對於Spring和SpringBoot到底有什麽區別,我聽到了很多答案,剛開始邁入學習SpringBoot的我當時也是一頭霧水,隨著經驗的積累、我慢慢理解了這兩個框架到底有什麽區別

fgets和fputsfread和fwritefscanf和fprintf用法小結

fwrite fgets eof IT 意義 遇到 其中 文件 之前 一、fgets(str,n,fp); fgets(str,n,fp);就是從fp指向的文件中讀取n-1個字符送入字符數組str中。 說明:1、在讀出n-1個字符之前,如果遇到了換行符或者EOF,則讀出結束

valueinnerHTMLinnerText的區別

value與innerHTML,innerText的區別: innerHTML與innerText的區別我就不講了,主要講value與這兩者的區別! 1.value是表單元素的特有屬性,非表單元素沒有value屬性,如div,span等; 2.value在不同表單元素裡有不同的意義,如b

查缺補漏——StringStringBufferStringBuilder區別用法

最近在看併發及虛擬機器部分,介紹了String是不可變的物件,順便複習了與string相關的類。 一 String是不可變物件,它一定是執行緒安全的,因為當我們呼叫substring(),replace(),concat()這些方法時,都不會影響它原來的值,只會返回一個新構造的字串物件,因此當要

Spring整合mybatis時資料庫配置com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver區別

1、#mysql-connector-java 5 用法 spring.datasource.driver-calss-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnico

QT QTableView用法小結(設定單元格字型顏色文字字型...)

這幾天在公司做關於衰減開關的上位機,用到很多表格,其中表格基本上都是用QTableView進行編寫。為了防止以後忘記,同時也給後續的同學一點學習建議,特此寫下這篇部落格。 QTableView常用於實現資料的表格顯示。下面我們如何按步驟實現學生資訊表格:一 新增表頭

Spring @Value("$XXX")注入值失敗錯誤資訊提示:Could not resolve placeholder佔位符不能被解析

問題原因: Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'wx.app.config.appid' in string value "${wx.app.config

Spring @controller@service@repository@component區別

今天在做課設的時候發現SpringBoot一直用不了Service層的類。。記得有個@component服註解,百度這個註解的時候,發現了一個新大陸(關於@controller,@service,@repository,@component區別),這解決了我學SSM的一個困惑,特此分享。

2.spring boot熱啟動autowired自動載入value註解屬性注入

<dependency> <groupId>org.springframework.boot</groupId> <artifactId&

Spring-boot中@ConfigurationProperties@Value@PropertySource

1.利用@ConfigurationProperties獲取配置的值,@ConfigurationProperties是springboot提供的基於安全型別的配置放置。     application.properties spring.redis.host=127.0.0.1

C++系列——const引用指標用法小結

1. const 將變數設定為只讀,任何對其進行的寫操作(如賦值),都會導致編譯錯誤。 2. 引用 引用(複合型別)就是物件的另外一個名字。 關於定義引用幾點要求: a. 定義引用的時候,必須初始化(指定引用指向物件的唯一方法)。非法情況:int &ref;

spring cloud註冊中心服務提供作者服務消費者的一些區別

Spring Cloud Eureka, 使用Netflix Eureka來實現服務註冊與發現。 Eureka服務端,我們也稱為服務註冊中心。   同其他服務註冊中心 一 樣,支援高可用配置。它依託於強 一 致性提供良好的服務例項可用性,可以應對多種不同的故障場景。如果E

ubuntu16.04下徹底解除安裝wineqq安裝wineqqdpkg用法小結

之前不知怎麼回事,下載的wineqq不能使用,在今天終於把它刪除,這裡簡單的進行一下記錄~ 1. sudo dpkg -r wine-qqintl 這裡的dpkg -r 含義是移除軟體但是保留配置 2. sudo rm -rf .deep

Spring】只想用一篇文章記錄@Value的使用不想再找其它了(附思維導圖)

1 簡介 不得不說,Spring為大家提供許多開箱即用的功能,@Value就是一個極其常用的功能,它能將配置資訊注入到bean中去。即使是一個簡單的功能,Spring也提供了豐富的注入型別和形式。我經常會忘記一些特別型別注入的寫法,比如說陣列,現在整理一下,希望以後不用再找了。 2 三種形式 使用@Val

Spring混合配置時遇到配置文件路徑NotFound使用PathMatchingResourcePatternResolver解決

perl mapper mat add 配置 spa ner log addall 在將spring的xml配置改為java配置的過程中,遇到了一些問題,block時間比較長的一個問題是資源(.xml, .properties)的路徑找不到,最後是使用PathMatchin

spring boot無法啟動或者正常啟動之後無法訪問報404的解決辦法

沒有 自己 路徑 con 啟動不了 瀏覽器 了無 搭建 報錯 以前用spring boot都是用idea的自動創建,或者是用的Jhipster創建的,就沒有深究怎麽去搭建。但是今天晚上心血來潮,想自己搭一個demo來整合一些技術,於是就花一點時間來手動搭。因為今