基於Spring boot @Value 註解注入屬性值的操作方法
本文主要介紹Spring @Value 註解注入屬性值的使用方法的分析,文章通過示例程式碼非常詳細地介紹,對於每個人的學習或工作都有一定的參考學習價值
在使用spring框架的專案中,@Value是經常使用的註解之一。其功能是將與配置檔案中的鍵對應的值分配給其帶註解的屬性。在日常使用中,我們常用的功能相對簡單。本文使您系統地瞭解@Value的用法。
@Value注入形式
- 根據注入的內容來源,@ Value屬性注入功能可以分為兩種:通過配置檔案進行屬性注入和通過非配置檔案進行屬性注入。
- 非配置檔案注入的型別如下:
- 注入普通字串注入作業系統屬性注射表達結果注入其他bean屬性注入檔案資源注入URL資源
基於配置檔案的注入
首先,讓我們看一下配置檔案中的資料注入,無論它是預設載入的application.properties還是自定義my.properties文件(需要@PropertySource額外載入)。例如:application.properties屬性值以以下形式定義:
user.name=admin
my.properties配置檔案中定義的屬性如下:
user.password=pwd123
然後,在bean中使用@Value,如下所示:
@PropertySource("classpath:my.properties") @RestController public class ValueController { /** *Get in application.properties Properties configured in */ @Value("${user.name}") private String name; /** *Get in my.properties Configuration properties in */ @Value("${user.password}") private String password; }
區別在於,在spring boot專案中,如果使用my.properties檔案,則需要通過類中的@ PropertySource匯入配置檔案,而application.properties中的屬性將自動載入。
同時,您不僅可以通過@Value注入單個屬性,還可以採用陣列和列表的形式。例如,配置如下:
tools=car,train,airplane
可以通過以下方式注入它:
/** *Injection array (automatically split according to ",") */ @Value("${tools}") private String[] toolArray; /** *Injection list form (automatic segmentation based on "," and) */ @Value("${tools}") private List<String> toolList;
預設情況下,spring將以“,”分割,並將其轉換為相應的陣列或列表。
基於非配置檔案的注入
在使用示例說明基於非配置檔案注入屬性的例項之前,讓我們看一下SpEl。
Spring Expression Language是Spring表示式語言,可以在執行時查詢和操作資料。使用#{…}作為操作符號,大括號中的所有字元均視為SpEl。
讓我們看一下特定例項場景的應用:
/** *例項化一個字串,並賦予預設值 */ @Value private String wechatSubscription; /** *讀取系統的環境變數 */ @Value("#{systemProperties['os.name']}") private String systemPropertiesName; /** *注入表示式計算結果 */ @Value("#{ T(java.lang.Math).random() * 100.0 }") private double randomNumber; /** *讀取一個bean:config的tool屬性並注入 */ @Value("#{config.tool}") private String tool; /** *將words用“|”分隔為字串陣列 */ @Value("#{'${words}'.split('\|')}") private List<String> numList; /** *注入一個檔案資源 */ @Value("classpath:config.xml") private Resource resourceFile; /** *注入 URL 資源 */ @Value("http://www.choupangxia.com") private URL homePage;
上面的示例顯示了以下方案的使用:
- 直接注入字串等效於例項化時直接初始化字串。初始化空串
- 通過#{}注入系統變數。
- 表示式計算結果通過#{}注入。
- 通過#{}注入其他bean的屬性。
- 通過{}和$ {}的組合注入屬性,然後拆分。
- 注入檔案資源,並將相應的字串值轉換為相應的資原始檔。
- 注入URL資源並將相應的URL字串轉換為URL
預設值注入
無論使用#{}(SpEL)還是$ {}進行屬性注入,當無法獲得相應的值時,都需要設定預設值,可以通過以下方式進行設定。
/** *If IP is not configured in the property,the default value is used */ @Value("${ip:127.0.0.1}") private String ip; /** *If the value of port is not obtained in the system properties,8888 is used. */ @Value("#{systemProperties['port']?:'8888'}") private String port;
$ {}中直接使用“:”來設定未定義或空值的預設值,而#{}則需要使用“?:”來設定未設定屬性的預設值。
總結
到此這篇關於結合SpEL使用@Value-基於配置檔案或非配置的檔案的值注入-Spring Boot的文章就介紹到這了,更多相關Spring @Value 註解注入屬性值內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!