最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot詳解如果通過@Value注解給靜態(tài)變量注入值

 更新時間:2022年06月17日 09:22:48   作者:奇點_97  
這篇文章主要介紹了springboot如何通過@Value給靜態(tài)變量注入值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

最近做項目的時候,給static變量賦值, 使用 @value注解 ,結(jié)果 獲取一直為null ,

1、spring不允許/不支持把值注入到靜態(tài)變量中
 
2、Spring的@Value依賴注入是依賴set方法
 
3、set方法是普通的對象方法
 
4、static變量是類的屬性,static沒有set方法

前序

SpringBoot中使用@Value()只能給普通變量注入值,不能直接給靜態(tài)變量賦值

例如,application-dev.properties配置文件有如下配置:

給普通變量賦值時,直接在變量聲明之上添加@Value()注解即可,如下所示:

當(dāng)要給靜態(tài)變量注入值的時候,若是在靜態(tài)變量聲明之上直接添加@Value()注解是無效的,例如:

雖然沒有編譯和運行上的報錯,經(jīng)調(diào)試可知這種注解方式mailUsername、mailPassword、mailHost的值都是null,也就是說直接給靜態(tài)變量讀取配置文件是無效的,如下所示:

方案一

若要給靜態(tài)變量賦值,可以使用set()方法,其中需要在類上加入@Component注解,方法名(例如setMailUsername)和參數(shù)名(例如username)可以任意命名,如下所示:

調(diào)試結(jié)果如下:

@Component
public class JDConfig {
    /** 轉(zhuǎn)換系統(tǒng)地址 */
    public static String url;
    /** 轉(zhuǎn)換系統(tǒng)應(yīng)用系統(tǒng)id */
    public static String sysId;
    /** 是否開啟鑒權(quán) */
    public static Boolean isAuth;
    /** 轉(zhuǎn)換系統(tǒng)應(yīng)用系統(tǒng)秘鑰(如開啟鑒權(quán)需要填寫) */
    public static String sysKey;
    @Autowired(required = false)
    @Value(value="${jd.serverHost:}")
    public void setUrl( String url) {
        JDConfig.url = url;
    }
    @Autowired(required = false)
    @Value(value="${contract.jd.appKey:}")
    public void setSysId( String sysId) {
        JDConfig.sysId = sysId;
    }
    @Autowired(required = false)
    @Value(value="${jd.isAuth:true}")
    public void setAuth(Boolean isAuth) {
        JDConfig.isAuth = isAuth;
    }
    @Autowired(required = false)
    @Value(value="${contract.jd.appSecurity:}")
    public void setSysKey(String sysKey) {
        JDConfig.sysKey = sysKey;
    }
    public  String getUrl() {
        return url;
    }
    public  String getSysId() {
        return sysId;
    }
    public  Boolean getIsAuth() {
        return isAuth;
    }
    public  String getSysKey() {
        return sysKey;
    }
}

方案二

如果你覺得@value注解麻煩??梢允褂聾ConfigurationProperties注解代替,這樣比較簡潔

  • 前綴要寫合適
  • 方法名(例如setOssUrl)必須和屬性保持一致,例如寫為setUrl()會注入失敗
  • 類上加入@Component注解

最近的項目還有有這樣一個需求,就是類中有幾個靜態(tài)變量,初始化的時候,他們的值需要讀取一個配置文件,獲取一個code,然后用這個code拼接而成。 這個code不是靜態(tài)的變量,怎么實現(xiàn)的呢,代碼如下:

    @Value("${projectCode}")
    private String projectCode;
    public static String COOPERATIVE_GOV_TEMPLATE_KEY ;
    // 消息短信配置
    public static String DEPOLY_KEY;
    // 消息短信詳情配置
    public static String MSG_DEPOLY_KEY;
    // 過濾配置
    public static String MSG_FILTER_KEY;
    @PostConstruct
    public void init() {
        COOPERATIVE_GOV_TEMPLATE_KEY = projectCode + ":template";
        DEPOLY_KEY = projectCode + ":depoly";
        MSG_DEPOLY_KEY = projectCode + ":msgDepoly";
        MSG_FILTER_KEY = projectCode + ":msgFilter";
    }

這樣當(dāng)項目啟動的時候,這幾個靜態(tài)變量就有有值了。 一定要注意這個類要被spring管理,也就是要用@Controller,@Service,@Component等注解注釋。

方案三

  • 類上加入@Component注解
  • @PostConstruct注解修飾的方法中進(jìn)行賦值操作

使用場景

那么問題來啦!我們什么場景下需要把值注入到靜態(tài)變量?

場景一

場景二

工具類中將值注入靜態(tài)變量,就可以直接在靜態(tài)方法之中使用,我本文中遇到的正是這個場景

總結(jié)

本文中,我們從一個實際問題出發(fā),探尋了三種在springboot中靜態(tài)變量注入方案,希望對大家有所幫助。

到此這篇關(guān)于SpringBoot詳解如果通過@Value注解給靜態(tài)變量注入值的文章就介紹到這了,更多相關(guān)SpringBoot @Value內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java源碼解析之ConcurrentHashMap

    Java源碼解析之ConcurrentHashMap

    今天帶大家分析Java源碼,文中對Java ConcurrentHashMap介紹的非常詳細(xì),有代碼示例,對正在學(xué)習(xí)Java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 在java中獲取List集合中最大的日期時間操作

    在java中獲取List集合中最大的日期時間操作

    這篇文章主要介紹了在java中獲取List集合中最大的日期時間操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • SpringBoot整合Redis的實現(xiàn)示例

    SpringBoot整合Redis的實現(xiàn)示例

    本文主要介紹了SpringBoot整合Redis的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 解決Springboot項目中很多頁面出現(xiàn)Whitelabel Error Page(404)的問題

    解決Springboot項目中很多頁面出現(xiàn)Whitelabel Error Page(404)的問題

    最近在接手的前后端項目中發(fā)現(xiàn)其默認(rèn)路徑不是主機+端口(如:http://localhost:3453/)的形式,很多頁面的訪問是加了一個層級,只要訪問頁面就會出現(xiàn)Whitelabel Error Page(404),所以本文給大家提供了解決方案,需要的朋友可以參考下
    2024-02-02
  • 使用HttpSessionListener監(jiān)聽器實戰(zhàn)

    使用HttpSessionListener監(jiān)聽器實戰(zhàn)

    這篇文章主要介紹了使用HttpSessionListener監(jiān)聽器實戰(zhàn),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Springboot jar文件如何打包zip在linux環(huán)境運行

    Springboot jar文件如何打包zip在linux環(huán)境運行

    這篇文章主要介紹了Springboot jar文件如何打包zip在linux環(huán)境運行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 構(gòu)建SpringBoot+MyBatis+Freemarker的項目詳解

    構(gòu)建SpringBoot+MyBatis+Freemarker的項目詳解

    在本篇內(nèi)容里小編給大家整理的是關(guān)于構(gòu)建SpringBoot+MyBatis+Freemarker的項目的具體步驟以及實例代碼,需要的朋友們參考下。
    2019-06-06
  • java匿名內(nèi)部類實例簡析

    java匿名內(nèi)部類實例簡析

    匿名類是不能有名稱的類,所以沒辦法引用它們,必須在創(chuàng)建時,作為new語句的一部分來聲明它們,需要了解更多的可以參考本文
    2012-11-11
  • 深入理解Java基礎(chǔ)中的集合框架

    深入理解Java基礎(chǔ)中的集合框架

    Java集合框架(Java Collections Framework, JCF)也稱容器,這里可以類比 C++中的 STL,在這里主要對如下部分進(jìn)行源碼分析,及在面試中常見的問題,例如,在阿里面試常問到的 HashMap和ConcurrentHashMap原理等等,深入源碼分析是面試中必備的技能
    2023-08-08
  • Springboot?集成spring?cache緩存的解決方案

    Springboot?集成spring?cache緩存的解決方案

    這篇文章主要介紹了Springboot?集成spring?cache緩存,使用緩存最關(guān)鍵的一點就是保證緩存與數(shù)據(jù)庫的數(shù)據(jù)一致性,本文給大家介紹最常用的緩存操作模式,對Springboot?集成spring?cache緩存操作流程感興趣的朋友一起看看吧
    2022-06-06

最新評論

大姚县| 张家港市| 阳城县| 靖州| 定边县| 汝阳县| 合肥市| 共和县| 成武县| 维西| 墨竹工卡县| 顺昌县| 池州市| 涡阳县| 古田县| 张家口市| 平陆县| 中江县| 双峰县| 资源县| 乌什县| 平原县| 邻水| 东山县| 集安市| 青河县| 昭觉县| 银川市| 陇川县| 尉氏县| 普格县| 东源县| 昌宁县| 南乐县| 卓资县| 辉县市| 寿阳县| 青田县| 当涂县| 广安市| 左权县|