前幾天在開發過程中遇到一個使用 spring 的 @Value 給類的全局變量設置默認值不成功的問題,最后通過查資料也是輕松解決,但是發現使用@Value也是有多種多樣的方式,今天總算是將開發任務結束,於是打算回過頭來再去研究研究這個問題。
一、首先展示兩種我這邊的錯誤寫法。讓大家引以為戒。
1. 在給類的全局靜態變量設置默認值時,@Value 不能直接寫在變量上方。
2.將 @Value 加到set方法上時,不能使用 static 修飾
3.使用 @Value 時不能用#代替$
以上幾種錯誤就是我在開發過程中出現的一些比較容易出現的錯誤,下面就是我在查詢資料時學習到@Value的一些使用方法。
二、配置 .properties 文件
使用 @Value 我們一般會將一些經常容易修改,但是在程序中不變的變量配置到配置文件中,一般是 .properties 文件,下面是三種不同的方式去將 .properties 文件引入到項目中。
1. 在spring 的配置文件中使用 <context:property-placeholder/> 標簽,其中 loaction 為配置文件路徑 file-encoding 為配置編碼格式
2. 在spring 的配置文件中配置bean
3. 第三種則是使用 @PropertySource 注解將配置文件加載到某一個類中
三、@Value 注解的使用
1. 非靜態變量使用 @Value
①. 將@Value 加在變量上
②. 將@Value 加在 set 方法上
2. 靜態變量使用 @Value
靜態變量在使用 @Value時,只能加在 set 方法上面,並且set方法不能是靜態方法
四、# 符與 $ 符的區別
1. @Value("#{}")
①. 直接給變量賦值
②. 對賦值的字符串進行一些操作
③. 如果 .properties 是以bean的方式注入的,則可以使用bean的id去獲取屬性
④. 上面的情況還可以這么寫
⑤. 表達式
2. @Value("${}")
①. 獲取普通配置文件中的屬性
②. 如果配置文件中沒有獲取到屬性值則使用默認值
3. 其他無符號用途
①. 文件資源
②. 網站資源
五、在引入 .properties 文件時出現的 編碼問題
在上面學習開始時我還遇到使用 @Value 注解設置默認值為中文時出現的亂碼問題,我在網上百度出來好多博客幾乎大同小異都是下面兩種解決方案,以及修改 IDE 的編碼格式等等:
1.修改注解
2. 修改配置文件
但是,在我實踐的過程中發現,這兩種方式都不能生效,不知道是因為我在什么地方沒有添加什么配置還是什么原因,如果有知道的小伙伴可以給我留言。我在測試時發現 .properties 文件在讀取時,無論 IDE 將文件設置為什么格式,都會將內容轉換為 ISO-8859-1 的編碼。於是我在獲取到默認值之后再將之轉換為 UTF-8.
還有一種方式就是在.properties 文件中寫中文時直接轉換成Unicode 編碼,使用 @Value 時就不用做其他轉碼操作。
-------------------- END ---------------------
最后附上作者的微信公眾號地址和博客地址
公眾號:wuyouxin_gzh
Herrt灬凌夜:https://www.cnblogs.com/wuyx/
版權說明:歡迎以任何方式進行轉載,但請在轉載后注明出處!