Springboot中@Value失效問題
Springboot中@Value失效
在寫項(xiàng)目過程中,由于快速開發(fā)項(xiàng)目,使用new的方式調(diào)用組件或服務(wù),這樣可麻煩了,導(dǎo)致組件里由@Value屬性無效。
有趣的是,在排查問題過程中,我在其他服務(wù)使用@Value又有效果,這看來看去。
最終真相只有一個(gè),這。
分析原因
new 的方法出來的實(shí)例不會交給spring管理,所以不會代理。
在Spring框架中,通過使用@Autowired或@Resource等注解,可以將對象注入到其他組件或服務(wù)中。
這樣,Spring會負(fù)責(zé)管理該對象的生命周期,并在需要的時(shí)候自動注入相關(guān)的屬性。
如果您想讓@Value注解生效,可以考慮將對象的創(chuàng)建交由Spring來管理。
1.使用@Component注解
將對象標(biāo)記為一個(gè)Spring管理的組件:
@Component public class MyObject { @Value("${my.property}") private String myProperty; // getters and setters }
然后在需要使用MyObject的地方,通過@Autowired注解將其注入:
@Autowired private MyObject myObject;
這樣Spring會自動將屬性值注入到MyObject對象中。
2.如果不想將對象標(biāo)記為一個(gè)組件
可以使用@Configuration和@Bean注解來創(chuàng)建對象:
@Configuration public class MyConfig { @Value("${my.property}") private String myProperty; @Bean public MyObject myObject() { MyObject myObject = new MyObject(); myObject.setMyProperty(myProperty); return myObject; } }
然后在需要使用MyObject的地方,通過@Autowired注解將配置類注入,并調(diào)用其myObject()方法獲取對象:
@Autowired private MyConfig myConfig; ... MyObject myObject = myConfig.myObject();
這樣也可以讓@Value注解生效,并將屬性值注入到MyObject對象中。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot如何實(shí)現(xiàn)各種參數(shù)校驗(yàn)
文章詳細(xì)介紹了SpringValidation的使用,包括簡單使用、requestBody參數(shù)校驗(yàn)、requestParam/PathVariable參數(shù)校驗(yàn)、統(tǒng)一異常處理、分組校驗(yàn)、嵌套校驗(yàn)、集合校驗(yàn)、自定義校驗(yàn)、編程式校驗(yàn)、快速失敗、@Valid和@Validated的區(qū)別以及實(shí)現(xiàn)原理2024-12-12Springboot視頻接口報(bào)大量的ClientAbortException找不到原因的解決
本文主要介紹了Springboot視頻接口報(bào)大量的ClientAbortException找不到原因的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08MyBatis-Plus updateById不更新null值的方法解決
用Mybatis-Plus的updateById()來更新數(shù)據(jù)時(shí),無法將字段設(shè)置為null值,更新后數(shù)據(jù)還是原來的值,本文就來詳細(xì)的介紹一下解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08SpringBoot+ShardingSphereJDBC實(shí)現(xiàn)讀寫分離詳情
這篇文章主要介紹了SpringBoot+ShardingSphereJDBC實(shí)現(xiàn)讀寫分離詳情,通過用??MySQL??進(jìn)行一主一從的主從復(fù)制展開全文內(nèi)容,需要的朋友可以參考一下2022-08-08使用JAVA實(shí)現(xiàn)高并發(fā)無鎖數(shù)據(jù)庫操作步驟分享
一個(gè)在線2k的游戲,每秒鐘并發(fā)都嚇?biāo)廊?。傳統(tǒng)的hibernate直接插庫基本上是不可行的。我就一步步推導(dǎo)出一個(gè)無鎖的數(shù)據(jù)庫操作,詳情看下文2013-11-11Java thread.isInterrupted() 返回值不確定結(jié)果分析解決
這篇文章主要介紹了Java thread.isInterrupted() 返回值不確定結(jié)果分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12