@Value如何設(shè)置默認(rèn)值
@Value設(shè)置默認(rèn)值
使用@Value注解將變量進行自動注入的時候,經(jīng)常會出現(xiàn)的一個問題就是我們可能會由于在配置參數(shù)中忘記設(shè)置該參數(shù)造成整個項目報錯,其實我們可以通過給被@Value注解作用的變量進行注入的時候如果沒有找到該配置參數(shù)時設(shè)置一個默認(rèn)值,相當(dāng)于是一個兜底的方案:
沒有默認(rèn)值的用法:
@Value("${spring.port}")
private String port;增加默認(rèn)值的用法:
@Value("${spring.port:8080}")
private String port;這里需要注意的是:
- 即使你的配置參數(shù)的值是String類型的話也不需要加雙引號
- 被static修飾的變量通過@Value會注入失敗
如果是因為特定需求必須要給static變量進行@Value設(shè)值的話,可以采用下面這種方式
- 給static變量采用@Value設(shè)值
public static String port;
@Value("${spring.port:8080}")
public void setPort(String port){
?? ?Class.port = port;
}@Value() 設(shè)置默認(rèn)值后,配置值無法生效的解決
遇到的現(xiàn)象:

使用@Value(${cash.trade.show.loan.repay:true})配置后,即使配置文件里配置了cash.trade.show.loan.repay = false ,程序獲得的showLoanRepay還是true。
這邊源碼會去匹配":"獲得后面的值,然后給propVal賦值,由于后面的判斷都是依照if(propVal==null)進行判斷的,所以默認(rèn)值賦值上去之后就不會獲取配置文件的值了。
這個是PropertyPlaceholderConfigurer的問題,如果是

由于方法列表里放有兩個方法,PropertyPlaceholderConfigurer先操作,所以默認(rèn)值賦值后導(dǎo)致后面的PropertySourcesPlaceholderConfigurer無法獲取到配置項里的內(nèi)容,如果列表順序換一下,就可以了,但是沒找到怎么弄。

這邊就是按順序方法執(zhí)行進行匹配參數(shù)


解決方法和解決理由
所以打算換個思路,不設(shè)置默認(rèn)值,并且讓系統(tǒng)在沒有獲取到默認(rèn)值時也不報錯。

進入源碼發(fā)現(xiàn),如果沒有配置時會根據(jù)下面這個參數(shù)進行判斷是否拋出異常

而前一張圖里發(fā)現(xiàn)PropertyPlaceholderConfigurer的值為true,PropertySourcesPlaceholderConfigurer的值為false,所以我們需要把PropertySourcesPlaceholderConfigurer的值配置成true這樣兩個工具都不會進行拋錯了。
只需要在spring的xml配置中加以下代碼對 進行設(shè)置
<bean id="propertySourcesPlaceholderConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>但是這里要注意了,如果你默認(rèn)的參數(shù)設(shè)置成String以外的就會報錯哦,我這邊就是設(shè)置成Boolean。


這里發(fā)現(xiàn),如果你沒有進行配置,并且設(shè)置忽略沒配置時,value值會被設(shè)為${}里面的參數(shù)名稱,所以會拋出類型異常,所以我把參數(shù)設(shè)置成了String,并且當(dāng)值等于參數(shù)名時當(dāng)成時默認(rèn)值。


總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 關(guān)于@Value注入List,Map及設(shè)置默認(rèn)值問題
- 在SpringBoot中使用@Value注解來設(shè)置默認(rèn)值的方法
- @Value設(shè)置默認(rèn)值后,獲取不到配置值的原因分析
- Spring中@Value設(shè)置默認(rèn)值問題解決
- SpringBoot的@Value注解如何設(shè)置默認(rèn)值
- Springboot @Value注入boolean設(shè)置默認(rèn)值方式
- Spring @Value 設(shè)置默認(rèn)值的實現(xiàn)
- 給@Value設(shè)置默認(rèn)值以及為static變量賦值問題
相關(guān)文章
Java設(shè)計模式---迭代器模式(Iterator)解讀
這篇文章主要介紹了Java設(shè)計模式---迭代器模式(Iterator),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-06-06
基于Spring概念模型:PathMatcher 路徑匹配器
這篇文章主要介紹了Spring概念模型:PathMatcher 路徑匹配器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
SpringSecurity+jwt+captcha登錄認(rèn)證授權(quán)流程總結(jié)
本文介紹了SpringSecurity、JWT和驗證碼在Spring Boot 3.2.0中的應(yīng)用,包括登錄認(rèn)證和授權(quán)流程的詳細步驟,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-11-11
使用Java實現(xiàn)為PPT(PowerPoint)設(shè)置背景
在日益數(shù)字化的辦公環(huán)境中,PowerPoint 演示文稿已成為信息傳達不可或缺的工具,本文將深入探討如何利用 Spire.Presentation for Java 為PowerPoint幻燈片設(shè)置純色、漸變色和圖片背景,感興趣的可以了解下2025-08-08
Java后端產(chǎn)生驗證碼后臺驗證功能的實現(xiàn)代碼
這篇文章主要介紹了Java后臺產(chǎn)生驗證碼后臺驗證功能,本文文字結(jié)合實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06

