基于Spring boot @Value 注解注入屬性值的操作方法
本文主要介紹Spring @Value 注解注入屬性值的使用方法的分析,文章通過示例代碼非常詳細(xì)地介紹,對于每個(gè)人的學(xué)習(xí)或工作都有一定的參考學(xué)習(xí)價(jià)值
在使用spring框架的項(xiàng)目中,@Value是經(jīng)常使用的注解之一。其功能是將與配置文件中的鍵對應(yīng)的值分配給其帶注解的屬性。在日常使用中,我們常用的功能相對簡單。本文使您系統(tǒng)地了解@Value的用法。
@Value注入形式
- 根據(jù)注入的內(nèi)容來源,@ Value屬性注入功能可以分為兩種:通過配置文件進(jìn)行屬性注入和通過非配置文件進(jìn)行屬性注入。
- 非配置文件注入的類型如下:
- 注入普通字符串注入操作系統(tǒng)屬性注射表達(dá)結(jié)果注入其他bean屬性注入文件資源注入U(xiǎn)RL資源
基于配置文件的注入
首先,讓我們看一下配置文件中的數(shù)據(jù)注入,無論它是默認(rèn)加載的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; }
區(qū)別在于,在spring boot項(xiàng)目中,如果使用my.properties文件,則需要通過類中的@ PropertySource導(dǎo)入配置文件,而application.properties中的屬性將自動加載。
同時(shí),您不僅可以通過@Value注入單個(gè)屬性,還可以采用數(shù)組和列表的形式。例如,配置如下:
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;
默認(rèn)情況下,spring將以“,”分割,并將其轉(zhuǎn)換為相應(yīng)的數(shù)組或列表。
基于非配置文件的注入
在使用示例說明基于非配置文件注入屬性的實(shí)例之前,讓我們看一下SpEl。
Spring Expression Language是Spring表達(dá)式語言,可以在運(yùn)行時(shí)查詢和操作數(shù)據(jù)。使用#{…}作為操作符號,大括號中的所有字符均視為SpEl。
讓我們看一下特定實(shí)例場景的應(yīng)用:
/** *實(shí)例化一個(gè)字符串,并賦予默認(rèn)值 */ @Value private String wechatSubscription; /** *讀取系統(tǒng)的環(huán)境變量 */ @Value("#{systemProperties['os.name']}") private String systemPropertiesName; /** *注入表達(dá)式計(jì)算結(jié)果 */ @Value("#{ T(java.lang.Math).random() * 100.0 }") private double randomNumber; /** *讀取一個(gè)bean:config的tool屬性并注入 */ @Value("#{config.tool}") private String tool; /** *將words用“|”分隔為字符串?dāng)?shù)組 */ @Value("#{'${words}'.split('\|')}") private List<String> numList; /** *注入一個(gè)文件資源 */ @Value("classpath:config.xml") private Resource resourceFile; /** *注入 URL 資源 */ @Value("http://www.choupangxia.com") private URL homePage;
上面的示例顯示了以下方案的使用:
- 直接注入字符串等效于實(shí)例化時(shí)直接初始化字符串。初始化空串
- 通過#{}注入系統(tǒng)變量。
- 表達(dá)式計(jì)算結(jié)果通過#{}注入。
- 通過#{}注入其他bean的屬性。
- 通過{}和$ {}的組合注入屬性,然后拆分。
- 注入文件資源,并將相應(yīng)的字符串值轉(zhuǎn)換為相應(yīng)的資源文件。
- 注入U(xiǎn)RL資源并將相應(yīng)的URL字符串轉(zhuǎn)換為URL
默認(rèn)值注入
無論使用#{}(SpEL)還是$ {}進(jìn)行屬性注入,當(dāng)無法獲得相應(yīng)的值時(shí),都需要設(shè)置默認(rèn)值,可以通過以下方式進(jìn)行設(shè)置。
/** *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;
$ {}中直接使用“:”來設(shè)置未定義或空值的默認(rèn)值,而#{}則需要使用“?:”來設(shè)置未設(shè)置屬性的默認(rèn)值。
總結(jié)
到此這篇關(guān)于結(jié)合SpEL使用@Value-基于配置文件或非配置的文件的值注入-Spring Boot的文章就介紹到這了,更多相關(guān)Spring @Value 注解注入屬性值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操
這篇文章主要介紹了JAVA8 List<List<Integer>> list中再裝一個(gè)list轉(zhuǎn)成一個(gè)list操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08Java Web開發(fā)項(xiàng)目中中文亂碼解決方法匯總
這篇文章主要為大家詳細(xì)匯總了Java Web開發(fā)項(xiàng)目中中文亂碼的解決方法,分析了5種Java Web中文亂碼情況,感興趣的小伙伴們可以參考一下2016-05-05idea創(chuàng)建的idea項(xiàng)目時(shí)springframework出現(xiàn)紅色的原因和解決方法
當(dāng)使用 IntelliJ IDEA 創(chuàng)建 Spring Framework 項(xiàng)目時(shí),springframework 出現(xiàn)紅色可能是因?yàn)橄嚓P(guān)的 Spring Framework 依賴沒有正確加載或項(xiàng)目的配置有問題,本文給大家介紹了一些常見的原因和解決方法,需要的朋友可以參考下2023-09-09Java幸運(yùn)28系統(tǒng)搭建數(shù)組的使用實(shí)例詳解
在本篇文章里小編給大家整理了關(guān)于Java幸運(yùn)28系統(tǒng)搭建數(shù)組的使用實(shí)例內(nèi)容,有需要的朋友們可以參考學(xué)習(xí)下。2019-09-09Spring啟動后獲取所有擁有特定注解的Bean實(shí)例代碼
這篇文章主要介紹了Spring啟動后獲取所有擁有特定注解的Bean實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02