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

基于@PostConstruct注解的使用,解決向靜態(tài)變量注入值

 更新時間:2021年09月18日 11:34:52   作者:Ru_yin_hai  
這篇文章主要介紹了基于@PostConstruct注解的使用,解決向靜態(tài)變量注入值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@PostConstruct注解的使用,向靜態(tài)變量注入值

今天在編寫工具類時遇到了一個問題,一般在定義工具類方時,我們會將工具類中的方法定義成static類型,使用時可以通過類名.方法名獲取該方法,無需實(shí)例化出對象才能使用其內(nèi)部方法,但是當(dāng)有些參數(shù)在配置文件中定義時,我們需要拿到這些參數(shù)就需要在工具類方法使用@Value注解進(jìn)行參數(shù)注入,但是@Value并不支持向static變量進(jìn)行注入(spring并不推薦將變量或?qū)ο舐暶鳛閟tatic類型,因?yàn)檫@樣擴(kuò)大了他們的使用范圍,spring依賴注入的目的就是,需要對象時進(jìn)行向容器中注入,在整個聲明周期中使用到他們,同時也讓testing工作更加容易,一但聲明為static后,就不需要再產(chǎn)生該對象的實(shí)例,這會讓testing變得更加困難,同時你也不能為一個給定的類,依靠注入方式去產(chǎn)生多個具有不同的依賴環(huán)境的實(shí)例.

這種static field是隱含共享的,并且是一種global全局狀態(tài),spring同樣不推薦這樣去做.)

因此現(xiàn)在工具類中的參數(shù)如何進(jìn)行使用,現(xiàn)在注入的參數(shù)是非靜態(tài)的,而方法是靜態(tài)的,如何在靜態(tài)方法中使用到非靜態(tài)變量呢?

可以使用@PostConstruct注解進(jìn)行使用

說說思路

我們可以通過非靜態(tài)變量進(jìn)行注入值,再通過@PostConstruct定義的init方法進(jìn)行將非靜態(tài)的變量值賦給靜態(tài)變量值(這里需要了解下類加載的先后順序)

代碼如下:

@Component
public class BaiduTranslateUtils { 
    private static Logger logger = LoggerFactory.getLogger(BaiduTranslateUtils.class);
    private static String BAIDU_FROM = "en";
    private static String BAIDU_TO = "zh";
    private static String BAIDU_DST = "dst";
    private static String APP_ID;
    private static String SECURITY_KEY;
 
    @Value("${baidu.translate.app_id}")
    private String app_id;
 
    @Value("${baidu.translate.security_key}")
    private   String security_key;
 
    @PostConstruct
    public void init(){
        //初始化賦值
        APP_ID = app_id;
        SECURITY_KEY = security_key;
    }     
    public static String getEntozhOfString(String dis){
        //靜態(tài)方法使用靜態(tài)變量
        System.out.println(APP_ID+SECURITY_KEY);
    } 
}

@PostConstruct和靜態(tài)變量注入和spring初始化

@PostConstruct這個注解是由Java提供的,而不是spring提供的,它用來修飾一個非靜態(tài)的void方法。它會在服務(wù)器加載Servlet的時候運(yùn)行,并且只運(yùn)行一次。bean創(chuàng)建完成空對象,就開始進(jìn)行@Autowire、@PostConstruct賦值。

@Component
public class SystemConstant {
    public static String surroundings;
    @Value("${spring.profiles.active}")
    public String environment;
    @PostConstruct
    public void initialize() {
        System.out.println("初始化環(huán)境...");
        surroundings = this.environment;
    }
}

執(zhí)行順序

  • 第一種:當(dāng)直接調(diào)用(沒有new對象)靜態(tài)方法時候:代碼塊(靜態(tài)變量按照順序)就執(zhí)行—–方法執(zhí)行。
  • 第二種創(chuàng)建對象:執(zhí)行父類靜態(tài)代碼—-執(zhí)行子類的靜態(tài)代碼—-執(zhí)行父類構(gòu)造方法—–執(zhí)行子類的構(gòu)造方法(注:@PostConstruct修飾的方法是在構(gòu)造方法之后執(zhí)行的)

注:靜態(tài)變量和靜態(tài)代碼塊都是按照代碼書寫順序執(zhí)行的,對于靜態(tài)代碼塊只要是操作(調(diào)用靜態(tài)方法或者新建一個類等)這個類就會執(zhí)行(包括靜態(tài)變量)

靜態(tài)變量也可以用value注解進(jìn)行注入,只要將注解放在變量的set方法上即可,且方法不可為靜態(tài)方法

@Component
public class SystemConstant {
    public static String surroundings;
    @Value("${spring.profiles.active}")
    public String environment;
    
 @Value("${spring.profiles.active}")
 public void setSurroundings(String surroundings ){
  SystemConstant .surroundings = surroundings;
 }
}

關(guān)于spring初始化操作

實(shí)現(xiàn)ApplicationRunner接口,然后Override這個ApplicationRunner接口的run方法即可

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Data JPA的Audit功能審計(jì)數(shù)據(jù)庫的變更

    Spring Data JPA的Audit功能審計(jì)數(shù)據(jù)庫的變更

    數(shù)據(jù)庫審計(jì)是指當(dāng)數(shù)據(jù)庫有記錄變更時,可以記錄數(shù)據(jù)庫的變更時間和變更人等,這樣以后出問題回溯問責(zé)也比較方便,本文討論Spring Data JPA審計(jì)數(shù)據(jù)庫變更問題,感興趣的朋友一起看看吧
    2021-06-06
  • SpringBoot工程打包后執(zhí)行Java?-Jar就能啟動的步驟原理

    SpringBoot工程打包后執(zhí)行Java?-Jar就能啟動的步驟原理

    這篇文章主要介紹了SpringBoot工程打包后為何執(zhí)行Java?-Jar就能啟動,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Mybatis逆向工程筆記小結(jié)

    Mybatis逆向工程筆記小結(jié)

    MyBatis官方為我們提供了一個逆向工程,通過這個逆向工程,只需要建立好數(shù)據(jù)表,MyBatis就會根據(jù)這個表自動生成pojo類、mapper接口、sql映射文件,本文主要介紹了Mybatis逆向工程筆記小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • SpringBoot2學(xué)習(xí)之springboot與spring區(qū)別分析

    SpringBoot2學(xué)習(xí)之springboot與spring區(qū)別分析

    這篇文章主要為大家介紹了SpringBoot2學(xué)習(xí)之springboot與spring區(qū)別分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 分布式開發(fā)醫(yī)療掛號系統(tǒng)數(shù)據(jù)字典模塊前后端實(shí)現(xiàn)

    分布式開發(fā)醫(yī)療掛號系統(tǒng)數(shù)據(jù)字典模塊前后端實(shí)現(xiàn)

    這篇文章主要為大家介紹了分布式開發(fā)醫(yī)療掛號系統(tǒng)數(shù)據(jù)字典模塊前后端實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Guava輕松創(chuàng)建和管理不可變集合方法技巧

    Guava輕松創(chuàng)建和管理不可變集合方法技巧

    這篇文章主要為大家介紹了Guava輕松創(chuàng)建和管理不可變集合方法技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • java實(shí)現(xiàn)excel導(dǎo)出合并單元格的步驟詳解

    java實(shí)現(xiàn)excel導(dǎo)出合并單元格的步驟詳解

    這篇文章主要介紹了java實(shí)現(xiàn)excel導(dǎo)出合并單元格,通過使用Apache POI庫,我們可以方便地創(chuàng)建Excel文件、填充數(shù)據(jù)、合并單元格和導(dǎo)出Excel文件,需要的朋友可以參考下
    2023-04-04
  • JAVA使用quartz添加定時任務(wù),并依賴注入對象操作

    JAVA使用quartz添加定時任務(wù),并依賴注入對象操作

    這篇文章主要介紹了JAVA使用quartz添加定時任務(wù),并依賴注入對象操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java中Hutool克隆功能的使用

    Java中Hutool克隆功能的使用

    本文主要介紹了Java中Hutool克隆功能的使用,cn.hutool.core.clone.Cloneable?是Hutool中提供的一個接口,用于支持對象的深度克隆操作,下面就一起來介紹一下
    2024-04-04
  • Java實(shí)現(xiàn)Ip地址獲取的示例代碼

    Java實(shí)現(xiàn)Ip地址獲取的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)Ip地址獲取的兩種方式,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2023-09-09

最新評論

吉木乃县| 商丘市| 依安县| 关岭| 南安市| 濉溪县| 栖霞市| 周宁县| 抚宁县| 平湖市| 河池市| 齐齐哈尔市| 五华县| 突泉县| 兴山县| 河间市| 宜春市| 雷波县| 温宿县| 海门市| 湖州市| 宁化县| 泗水县| 襄城县| 永德县| 宝清县| 肃北| 兰州市| SHOW| 新昌县| 航空| 连南| 宁晋县| 白朗县| 九龙县| 文水县| 马关县| 大田县| 东乡族自治县| 麻城市| 叶城县|