欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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()注解是無效的,例如:

雖然沒有編譯和運(yùn)行上的報錯,經(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實現(xiàn)春聯(lián)?支持自定義字體顏色

    用Java實現(xiàn)春聯(lián)?支持自定義字體顏色

    大家好,本篇文章主要講的是用Java編寫春聯(lián)?支持自定義字體顏色,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • MyBatis逆向工程的創(chuàng)建和使用

    MyBatis逆向工程的創(chuàng)建和使用

    這篇文章主要介紹了MyBatis逆向工程的創(chuàng)建和使用,需要的朋友可以參考下
    2017-08-08
  • 正確結(jié)束Java線程的方法

    正確結(jié)束Java線程的方法

    線程的啟動很簡單,但用戶可能隨時取消任務(wù),怎么樣讓跑起來的線程正確地結(jié)束,這是今天要討論的話題。下面小編來和大家一起學(xué)習(xí)一下吧
    2019-05-05
  • Java常用的數(shù)據(jù)脫敏方法(手機(jī)、郵箱、身份證號)

    Java常用的數(shù)據(jù)脫敏方法(手機(jī)、郵箱、身份證號)

    這篇文章主要給大家介紹了關(guān)于Java常用的數(shù)據(jù)脫敏(手機(jī)、郵箱、身份證號)的相關(guān)資料,信息脫敏對某些敏感信息通過脫敏規(guī)則進(jìn)行數(shù)據(jù)的變形,實現(xiàn)敏感隱私數(shù)據(jù)的可靠保護(hù),需要的朋友可以參考下
    2023-07-07
  • Spring AOP的概念與實現(xiàn)過程詳解

    Spring AOP的概念與實現(xiàn)過程詳解

    AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,可通過運(yùn)行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。AOP是 Spring框架中的一個重要內(nèi)容
    2023-02-02
  • Maven插件的安裝及使用

    Maven插件的安裝及使用

    這篇文章主要介紹了Maven插件的安裝及使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java 使用Docker時經(jīng)常遇到的五個問題

    Java 使用Docker時經(jīng)常遇到的五個問題

    這篇文章主要介紹了Java 使用Docker時經(jīng)常遇到的五個問題的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 一篇文章帶你搞定 springsecurity基于數(shù)據(jù)庫的認(rèn)證(springsecurity整合mybatis)

    一篇文章帶你搞定 springsecurity基于數(shù)據(jù)庫的認(rèn)證(springsecurity整合mybatis)

    這篇文章主要介紹了一篇文章帶你搞定 springsecurity基于數(shù)據(jù)庫的認(rèn)證(springsecurity整合mybatis),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java實現(xiàn)在Word指定位置插入分頁符

    Java實現(xiàn)在Word指定位置插入分頁符

    在Word插入分頁符可以在指定段落后插入,也可以在特定文本位置處插入。本文將以Java代碼來操作以上兩種文檔分頁需求,需要的可以參考一下
    2022-04-04
  • Spring使用aop切面編程時要給那些類加注解的實例

    Spring使用aop切面編程時要給那些類加注解的實例

    在使用切面編程時,通常需要為以下類或組件添加注解來標(biāo)識它們,以便 Spring 或其他切面框架能夠正確識別和處理它們,這篇文章主要介紹了Spring使用aop切面編程時要給那些類加注解,需要的朋友可以參考下
    2023-11-11

最新評論