SpringBoot項(xiàng)目中通過@Value給參數(shù)賦值失敗的解決方案
項(xiàng)目場(chǎng)景:
springboot項(xiàng)目中通過@Value給屬性附值失敗
問題描述
給參數(shù)賦值失敗,打印為空值
@Value("${python.server.port}")
private int port;
@Value("${python.server.host}")
private String host;
public PythonSocketClient(){
System.out.println("Host: " + host);
System.out.println("Port: " + port);
connect();
}
測(cè)試發(fā)現(xiàn)是成功注入的
@SpringBootTest
public class ValueTest {
@Value("${python.server.host}")
private String host;
@Test
public void testConfiguration() {
System.out.println("Host configured as: " + host);
}
}可以看到是正確賦值了

原因分析:
這是因?yàn)樵?Spring Bean 的生命周期中,構(gòu)造函數(shù)是最先被調(diào)用的,此時(shí)依賴注入還沒有完成,因此 @Value 注入的字段尚未被初始化。
也就是說還沒附上值就運(yùn)行了構(gòu)造器
解決方案:
使用 @PostConstruct 注解的方法來確保在所有字段注入完成之后再執(zhí)行初始化邏輯。
@Value("${python.server.port}")
private int port;
@Value("${python.server.host}")
private String host;
@PostConstruct
public void init() {
System.out.println("Host: " + host);
System.out.println("Port: " + port);
connect();
}再次運(yùn)行

發(fā)現(xiàn)已經(jīng)可以正常獲取值了。
到此這篇關(guān)于SpringBoot項(xiàng)目中通過@Value給參數(shù)賦值失敗的解決方案的文章就介紹到這了,更多相關(guān)SpringBoot @Value賦值失敗內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot Event實(shí)現(xiàn)異步消費(fèi)機(jī)制的示例代碼
這篇文章主要介紹了SpringBoot Event實(shí)現(xiàn)異步消費(fèi)機(jī)制,ApplicationEvent以及Listener是Spring為我們提供的一個(gè)事件監(jiān)聽、訂閱的實(shí)現(xiàn),內(nèi)部實(shí)現(xiàn)原理是觀察者設(shè)計(jì)模式,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2024-04-04
Java實(shí)現(xiàn)2048小游戲(可直接運(yùn)行)
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)2048小游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
SpringBoot異常錯(cuò)誤頁(yè)面實(shí)現(xiàn)方法介紹
在項(xiàng)目訪問的時(shí)候我們經(jīng)常會(huì)發(fā)生錯(cuò)誤或者頁(yè)面找不到,比如:資源找不到404,服務(wù)器500錯(cuò)誤,默認(rèn)情況下springboot的處理機(jī)制都是去跳轉(zhuǎn)內(nèi)部的錯(cuò)誤地址:/error 和與之對(duì)應(yīng)的一個(gè)錯(cuò)誤頁(yè)面2022-09-09
完美解決java.lang.OutOfMemoryError處理錯(cuò)誤的問題
下面小編就為大家?guī)硪黄昝澜鉀Qjava.lang.OutOfMemoryError處理錯(cuò)誤的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
選擇Spring Boot項(xiàng)目的內(nèi)嵌容器的理由
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程。這篇文章主要介紹了選擇Spring Boot項(xiàng)目的內(nèi)嵌容器,需要的朋友可以參考下2017-11-11
java?socket實(shí)現(xiàn)局域網(wǎng)聊天
這篇文章主要為大家詳細(xì)介紹了java?socket實(shí)現(xiàn)局域網(wǎng)聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05

