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

靜態(tài)工具類中注入Bean及引用Nacos配置方式

 更新時間:2025年07月24日 08:50:02   作者:linab112  
在Spring開發(fā)中,靜態(tài)工具類無法注入Bean或Nacos值,因靜態(tài)變量加載時Spring上下文未初始化,建議通過@Component標(biāo)記Bean,使用構(gòu)造器或Setter注入依賴,或直接在Bean內(nèi)處理Nacos配置,實現(xiàn)靈活調(diào)用

1.說明

在代碼開發(fā)中,經(jīng)常會存在調(diào)用第三方工具或者其他系統(tǒng)的場景,通常封裝成一個工具類供service進(jìn)行調(diào)用,便于后期的維護(hù)及代碼復(fù)用。

工具類中的屬性及方法都被static修飾,在工具類中不能使用和service中一樣的注入Bean及引用Nacos值的方式。

不能給靜態(tài)變量注入Bean的原因

Spring從源碼層面不提供對static修飾的變量進(jìn)行注入,靜態(tài)變量不屬于任何一個實例,而是屬于類的。

當(dāng)類加載器加載靜態(tài)變量時,Spring的上下文環(huán)境還沒有被加載。

這是因為初始化類的加載升序?qū)е碌模绦騿訒r會加載根路徑下所有的類,不管這個類是否會用到都會去加載;會先初始化靜態(tài)變量和執(zhí)行靜態(tài)代碼塊,這時候無法創(chuàng)建對象,而@autowired是要注入一個對象。

2.示例

@Component
public class BpmUtils {


    private static RestTemplate restTemplate;
    private static LogTool logTool;

    @Autowired
    public void setRestTemplate(RestTemplate restTemplate) {
        BpmUtils.restTemplate = restTemplate;
    }

    @Autowired
    public void setLogTool(LogTool logTool) {
        BpmUtils.logTool = logTool;
    }

    // 權(quán)限用戶名
    private static String accessKey;
    // 權(quán)限密碼
    private static String secret;
    // 系統(tǒng)用戶
    private static String userCode;
    // tokenUrl
    private static String tokenUrl;
    // 部門url
    private static String deptUrl;
    // 用戶url
    private static String userUrl;

    @NacosValue(value = "${bpm.accessKey}", autoRefreshed = true)
    public void setAccessKey(String accessKey) {
        BpmUtils.accessKey = accessKey;
    }

    @NacosValue(value = "${bpm.secret}", autoRefreshed = true)
    public void setSecret(String secret) {
        BpmUtils.secret = secret;
    }

    @NacosValue(value = "${bpm.userCode}", autoRefreshed = true)
    public void setUserCode(String userCode) {
        BpmUtils.userCode = userCode;
    }

    @NacosValue(value = "${bpm.tokenUrl}", autoRefreshed = true)
    public void setTokenUrl(String tokenUrl) {
        BpmUtils.tokenUrl = tokenUrl;
    }

    @NacosValue(value = "${bpm.deptUrl}", autoRefreshed = true)
    public void setDeptUrl(String deptUrl) {
        BpmUtils.deptUrl = deptUrl;
    }

    @NacosValue(value = "${bpm.userUrl}", autoRefreshed = true)
    public void setUserUrl(String userUrl) {
        BpmUtils.userUrl = userUrl;
    }
}

①bean的注入方式

可以通過構(gòu)造器進(jìn)行注入,或者通過setter方法進(jìn)行注入。注意要在類上添加@Component注解,標(biāo)記為一個bean,這樣spring容器會掃描到。

我上面采用的是setter方法注入,將容器中已有的bean設(shè)置到靜態(tài)變量中。

也可以使用構(gòu)造器注入的方式

    @Autowired
    public TestClass(AutowiredTypeComponent component) {
        TestClass.component = component;
    }

②Nacos中配置的注入方式

通過setter方法進(jìn)行注入,在setter方法上添加nacos注解,獲取配置的值,將值設(shè)置到靜態(tài)變量中。

3.補充

在實際開發(fā)中,我們也可以不使用靜態(tài)工具類的方式,可以通過注解方式創(chuàng)建一個bean,在bean內(nèi)直接注入nacos中的屬性,并寫一些方法,實際使用時,可以直接注入bean,然后進(jìn)行使用。

使用靜態(tài)工具類的方式,無需注入,可以直接使用。

總結(jié)

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

相關(guān)文章

  • Java的volatile和sychronized底層實現(xiàn)原理解析

    Java的volatile和sychronized底層實現(xiàn)原理解析

    文章詳細(xì)介紹了Java中的synchronized和volatile關(guān)鍵字的底層實現(xiàn)原理,包括字節(jié)碼層面、JVM層面的實現(xiàn)細(xì)節(jié),以及鎖的類型和MESI協(xié)議在多核處理器中的作用,文章還探討了synchronized和volatile的區(qū)別,以及如何通過Atomic類來實現(xiàn)更細(xì)粒度的原子操作,感興趣的朋友一起看看吧
    2025-03-03
  • Mybatis中SqlSession接口中selectList方法詳解

    Mybatis中SqlSession接口中selectList方法詳解

    這篇文章主要給大家介紹了關(guān)于Mybatis中SqlSession接口中selectList方法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-03-03
  • 解析JPA的視圖查詢問題

    解析JPA的視圖查詢問題

    這篇文章主要是對JPA的視圖查詢問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • springboot配置Jackson返回統(tǒng)一默認(rèn)值的實現(xiàn)示例

    springboot配置Jackson返回統(tǒng)一默認(rèn)值的實現(xiàn)示例

    在項目開發(fā)中,我們返回的數(shù)據(jù)或者對象沒有的時候一般直接返回的null,那么如何返回統(tǒng)一默認(rèn)值,感興趣的可以了解一下
    2021-07-07
  • java實現(xiàn)二叉樹遍歷的三種方式

    java實現(xiàn)二叉樹遍歷的三種方式

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)二叉樹遍歷的三種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • IDEA?報Plugin'maven-resources-plugin:'not?found?的解決方案

    IDEA?報Plugin'maven-resources-plugin:'not?found?

    如果在使用?IDEA?時遇到?"Plugin?'maven-resources-plugin:'?not?found"?錯誤,可能是由于?Maven?倉庫中未找到所需的?Maven?插件,近小編給大家分享幾種解決方法,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • Java實現(xiàn)的剪刀石頭布游戲示例

    Java實現(xiàn)的剪刀石頭布游戲示例

    這篇文章主要介紹了Java實現(xiàn)的剪刀石頭布游戲,涉及java隨機數(shù)生成及邏輯判定等相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Windows10安裝IDEA 2020.1.2的方法步驟

    Windows10安裝IDEA 2020.1.2的方法步驟

    這篇文章主要介紹了Windows10安裝IDEA 2020.1.2的方法步驟,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java使用分布式實現(xiàn)數(shù)據(jù)庫讀寫分離的示例代碼

    Java使用分布式實現(xiàn)數(shù)據(jù)庫讀寫分離的示例代碼

    在MySQL中可以通過配置主從復(fù)制來實現(xiàn)數(shù)據(jù)同步,本文主要介紹了Java使用分布式實現(xiàn)數(shù)據(jù)庫讀寫分離,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Spring中的兩種代理JDK和CGLIB的區(qū)別淺談

    Spring中的兩種代理JDK和CGLIB的區(qū)別淺談

    本篇文章中主要介紹了Spring中的兩種代理JDK和CGLIB的區(qū)別淺談,詳解的介紹了JDK和CGLIB的原理和方法,有需要的朋友可以了解一下
    2017-04-04

最新評論

浦城县| 漳平市| 财经| 蓬莱市| 天等县| 米林县| 宁乡县| 怀集县| 洪江市| 吴堡县| 时尚| 西宁市| 迁安市| 巩留县| 兰州市| 永平县| 波密县| 上林县| 吉水县| 津南区| 从江县| 南昌县| 塘沽区| 安岳县| 黄山市| 景泰县| 梅州市| 关岭| 防城港市| 衡山县| 新晃| 蒙自县| 廊坊市| 略阳县| 婺源县| 鄂托克前旗| 广安市| 延庆县| 开封县| 施秉县| 轮台县|