SpringBoot項目中通過@Value給參數(shù)賦值失敗的解決方案
項目場景:
springboot項目中通過@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();
}
測試發(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);
}
}可以看到是正確賦值了

原因分析:
這是因為在 Spring Bean 的生命周期中,構(gòu)造函數(shù)是最先被調(diào)用的,此時依賴注入還沒有完成,因此 @Value 注入的字段尚未被初始化。
也就是說還沒附上值就運行了構(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();
}再次運行

發(fā)現(xiàn)已經(jīng)可以正常獲取值了。
到此這篇關(guān)于SpringBoot項目中通過@Value給參數(shù)賦值失敗的解決方案的文章就介紹到這了,更多相關(guān)SpringBoot @Value賦值失敗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot Event實現(xiàn)異步消費機制的示例代碼
這篇文章主要介紹了SpringBoot Event實現(xiàn)異步消費機制,ApplicationEvent以及Listener是Spring為我們提供的一個事件監(jiān)聽、訂閱的實現(xiàn),內(nèi)部實現(xiàn)原理是觀察者設(shè)計模式,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下2024-04-04
完美解決java.lang.OutOfMemoryError處理錯誤的問題
下面小編就為大家?guī)硪黄昝澜鉀Qjava.lang.OutOfMemoryError處理錯誤的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01
java?socket實現(xiàn)局域網(wǎng)聊天
這篇文章主要為大家詳細介紹了java?socket實現(xiàn)局域網(wǎng)聊天,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05

