Springboot如何通過yml配置文件為靜態(tài)成員變量賦值
通過yml配置文件為靜態(tài)成員變量賦值
我們對springboot為普通成員變量的方式很熟悉,所以經常定式思維的認為靜態(tài)屬性的賦值和普通屬性一樣,結果調試的時候調試半天發(fā)現(xiàn)靜態(tài)屬性還是Null。
仔細一想才發(fā)現(xiàn)靜態(tài)屬性和普通屬性的賦值方式不太一樣。
到底是哪里不一樣呢?問題出在set方法。我們通過idea快捷鍵或注解 @Data 得到的set方法是靜態(tài)方法。
這里我強調一句
- 用idea快捷鍵或注解 @Data 得到的set方法是靜態(tài)方法
- 用idea快捷鍵或注解 @Data 得到的set方法是靜態(tài)方法
- 用idea快捷鍵或注解 @Data 得到的set方法是靜態(tài)方法

而springboot為屬性賦值時采用的是動態(tài)的setter注入,所以我們按照為普通屬性賦值的方法給靜態(tài)變量賦值必然是行不通的。
所以我們只需要將圖里面的 static 給刪掉就大功告成了??!
順便再提一句,在這個類上面需要加上 @ConfigurationProperties(prefix = "reggie.qiniu") 注解,并且在調用的地方加上 @EnableConfigurationProperties(QiniuUtils.class) 注解,括號里面的參數(shù)不可以跟我一樣哦,如果多處都需要調用的話,你嫌麻煩可以直接在springboot啟動類上加上這個注解。
怕有的同學還是看不懂,我再貼一下我yml配置文件里面配置的寫法。

Springboot靜態(tài)變量讀取yml配置信息
因為spring加載靜態(tài)方法比IOC早,所以不能直接使用@Value注解讀取yml配置,讀取結果往往是null。

解決方式1
我們可以通過@PostConstruct在服務加載Servlet的時候運行
@Configuration
public class DemoConfig {
//給靜態(tài)變量賦值
@Value("${mvc.test}")
public int test;
public void setTest(int test) {
this.test = test;
}
public static int TEST;
@PostConstruct
public void init(){
DemoConfig.TEST = test;
}
}然后在我們需要的地方調用就行了
@Component
public class MyConfig {
public void show(){
System.out.println(DemoConfig.TEST);
}
}解決方式2
我們可以通過@AutoConfigureAfter 來在當前類注入到容器之前去加載相關配置類
@Configuration
public class DemoConfig {
public static int test;
//給靜態(tài)變量賦值
@Value("${mvc.test}")
public void setTest(int test) {
DemoConfig.test = test;
}
}@AutoConfigureAfter({DemoConfig.class}) //加載當前文件之前先去加載DemoConfig文件
@Component
public class MyConfig {
public void show(){
//然后在我們需要的地方調用就行了
System.out.println(DemoConfig.test);
}
}以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring條件注解@ConditionnalOnClass的原理分析
這篇文章主要介紹了Spring條件注解@ConditionnalOnClass的原理分析,所謂@ConditionalOnClass注解,翻譯過來就是基于class的條件,它為所標注的類或方法添加限制條件,當該條件的值為true時,其所標注的類或方法才能生效,需要的朋友可以參考下2023-12-12
Java使用分治算法實現(xiàn)排序數(shù)索引功能示例【二分搜索】
這篇文章主要介紹了Java使用分治算法實現(xiàn)排序數(shù)索引功能,結合具體實例形式分析了java分治算法進行排序索引的相關操作技巧,需要的朋友可以參考下2017-09-09

