Springboot中@Value注解的場(chǎng)景用法及可能遇到的問(wèn)題詳解
前言
@Value注解可以通過(guò)#{}和${}等2中方式使用,其作用通常如下:
@Value(“#{}”) 表示SpEl表達(dá)式通常用來(lái)獲取bean的屬性,或者調(diào)用bean的某個(gè)方法。當(dāng)然還有可以直接表示常量。
用@Value(“${}”)注解一般從配置文件讀取屬性。
1 非配置文件注入
1.1 用法
通過(guò)@Value將外部的值動(dòng)態(tài)注入到Bean中,常見(jiàn)用法如下:
- 注入普通字符串
- 注入操作系統(tǒng)屬性
- 注入表達(dá)式結(jié)果
- 注入其他Bean屬性
- 注入beanInject對(duì)象的屬性another
- 注入文件資源
- 注入U(xiǎn)RL資源
非配置文件注入在實(shí)際開(kāi)發(fā)場(chǎng)景中使用的較少,@value大部分情況注入配置文件中的屬性
1.2 示例
注入普通字符串
直接附在屬性名上,在 Bean 初始化時(shí),會(huì)賦初始值。
@Value("admin")
private String name;注入系統(tǒng)屬性
@Value("#{systemProperties['os.name']}")
private String osName;注入其他bean的屬性
注入U(xiǎn)ser對(duì)象中的屬性u(píng)serName
@Value("#{User.userName}")
private String userName;注入文件資源
@Value("classpath:com/ndtest/spring/configinject/config.txt")
private Resource resourceFile;注入U(xiǎn)RL資源
@Value("http://www.baidu.com")
private Resource testUrl;2 配置文件注入(重點(diǎn))
SpringBoot 通過(guò) @Value 注解將配置文件中的屬性注入到容器內(nèi)組件中(可用在 @Controller 、@Service 、@Configuration、@Component 等Spring托管的類(lèi)中)
1.注入普通字符串
在 application.properties 配置文件中有如下配置:
userName=zhaoyp
我們可以使用@Value注解注入屬性:
@Value("${userName}")
public String userName;2.注入基本類(lèi)型(最常使用)
這次我們使用yml文件作為配置文件,假設(shè)application.yml文件中定義了服務(wù)器的基本配置
client: ipAddr: 222.95.84.124 sshPort: 22 sshUser: root sshPass: Test!@#123
我們可以通過(guò)@Value注解注入屬性
@Value("${client.ipAddr}")
private String ipAddr;
@Value("${client.sshPort}")
private Integer sshPort;
@Value("${client.sshUser}")
private String sshUser;
@Value("${client.sshPass}")
private String sshPass;3.注入數(shù)組、List類(lèi)型
假設(shè)配置文件如下:
ids=1,2,3
// 注入數(shù)組類(lèi)型
@Value("${ids}")
public int[] arrIds;
// 注入List
@Value("#{'${ids}'.split(',')}")
public List<String> listIds;
3 @Value注解獲取不到值的常見(jiàn)問(wèn)題
1 使用static或者final修飾了tagValue
錯(cuò)誤示范如下:
@Value("${ftpIP}")
private static String ftpIP;
@Value("${ftpUserName}")
private final String ftpUserName;解決辦法是移除static或final關(guān)鍵字。
2 使用該注解的類(lèi)上面沒(méi)有加注解
沒(méi)有加注解即不能被spring管理(類(lèi)沒(méi)有加上@Component(或者@service等))
錯(cuò)誤示范如下:
public class FTPManagerService {
@Value("${ftpIP}")
private static String ftpIP;
}正確案例:
@Component // 檢查注解是否遺漏
public class FTPManagerService {
@Value("${ftpIP}")
private static String ftpIP;
}3 使用new關(guān)鍵字新建了實(shí)例,而沒(méi)有使用@Autowired
錯(cuò)誤用法以及正確案例如下
public class FTPManagerService {
@Value("${ftpIP}")
private static String ftpIP;
}
public class Test{
/*錯(cuò)誤用法*/
FTPManagerService f = new FTPManagerService ();
/*正確用法*/
@Autowired
FTPManagerService f2;
}以上便是@Value注解的使用方法以及踩坑案例,希望能幫到大家~
總結(jié)
到此這篇關(guān)于Springboot中@Value注解的場(chǎng)景用法及可能遇到的問(wèn)題的文章就介紹到這了,更多相關(guān)Springboot @Value注解場(chǎng)景用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Java+MySQL實(shí)現(xiàn)附近功能實(shí)例
現(xiàn)在很多手機(jī)軟件都用附近搜索功能,但具體是怎么實(shí)現(xiàn)的呢?下面這篇文章就來(lái)給大家介紹關(guān)于利用Java+MySQL實(shí)現(xiàn)附近功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-12-12
關(guān)于Feign調(diào)用服務(wù)Headers傳參問(wèn)題
這篇文章主要介紹了關(guān)于Feign調(diào)用服務(wù)Headers傳參問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
java 字符串相減(很簡(jiǎn)單的一個(gè)方法)
本篇文章是對(duì)java中關(guān)于字符串相減的一個(gè)簡(jiǎn)單的方法進(jìn)行了介紹,需要的朋友參考下2013-07-07
java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解
這篇文章主要為大家介紹了java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
SpringBoot中集成screw(螺絲釘)實(shí)現(xiàn)數(shù)據(jù)庫(kù)表結(jié)構(gòu)文檔生成方法
這篇文章主要介紹了SpringBoot中集成screw(螺絲釘)實(shí)現(xiàn)數(shù)據(jù)庫(kù)表結(jié)構(gòu)文檔生成,下面以連接mysql數(shù)據(jù)庫(kù)并生成html格式的數(shù)據(jù)庫(kù)結(jié)構(gòu)文檔為例,插件的使用方式除可以使用代碼外,還可以使用Maven插件的方式,需要的朋友可以參考下2024-07-07
SpringBoot整合第三方技術(shù)的實(shí)現(xiàn)
本文主要介紹了SpringBoot整合第三方技術(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Java實(shí)現(xiàn)撲克牌的創(chuàng)建以及發(fā)放
在java當(dāng)中生成一副牌有很多種方法,有簡(jiǎn)單易于理解的面向過(guò)程編程,也有面向?qū)ο竽K化編程,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)撲克牌的創(chuàng)建以及發(fā)放的相關(guān)資料,需要的朋友可以參考下2023-03-03
springboot?通過(guò)博途獲取plc點(diǎn)位的數(shù)據(jù)代碼實(shí)現(xiàn)
這篇文章主要介紹了springboot?通過(guò)博途獲取plc點(diǎn)位的數(shù)據(jù)的代碼實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08
Java正則表達(dá)式驗(yàn)證固定電話(huà)號(hào)碼符合性
這篇文章主要介紹了Java正則表達(dá)式驗(yàn)證固定電話(huà)號(hào)碼符合性的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09
Spring Cloud Feign實(shí)現(xiàn)動(dòng)態(tài)URL
本文主要介紹了Spring Cloud Feign實(shí)現(xiàn)動(dòng)態(tài)URL,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

