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

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

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

1.說明

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

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

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

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

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

這是因為初始化類的加載升序?qū)е碌?,程序啟動時會加載根路徑下所有的類,不管這個類是否會用到都會去加載;會先初始化靜態(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)造器進行注入,或者通過setter方法進行注入。注意要在類上添加@Component注解,標記為一個bean,這樣spring容器會掃描到。

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

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

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

②Nacos中配置的注入方式

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

3.補充

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

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

總結(jié)

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

相關(guān)文章

  • Spring框架開發(fā)IOC兩種創(chuàng)建工廠方法詳解

    Spring框架開發(fā)IOC兩種創(chuàng)建工廠方法詳解

    這篇文章主要介紹了Spring框架IOC兩種創(chuàng)建工廠方法詳解,文中附含詳細的代碼示例分別對靜態(tài)方法和實例方法創(chuàng)建工廠作了簡要的分析
    2021-09-09
  • IntelliJ IDEA之配置JDK的4種方式(小結(jié))

    IntelliJ IDEA之配置JDK的4種方式(小結(jié))

    這篇文章主要介紹了IntelliJ IDEA之配置JDK的4種方式(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • MyBatis-plus實現(xiàn)逆向生成器

    MyBatis-plus實現(xiàn)逆向生成器

    本文主要介紹了MyBatis-plus實現(xiàn)逆向生成器,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Mybatis持久層框架入門之CRUD實例代碼詳解

    Mybatis持久層框架入門之CRUD實例代碼詳解

    這篇文章主要介紹了Mybatis持久層框架入門之CRUD實例,需要的朋友可以參考下
    2022-05-05
  • IntelliJ IDEA中如何調(diào)試Java Stream操作

    IntelliJ IDEA中如何調(diào)試Java Stream操作

    這篇文章主要介紹了IntelliJ IDEA中如何優(yōu)雅的調(diào)試Java Stream操作,在強大的IDEA插件支持下,stream的調(diào)試其實也沒那么難了,下面就來學(xué)習(xí)一下在IDEA中如何調(diào)試stream操作吧
    2022-05-05
  • Spring?createBeanInstance實例化Bean

    Spring?createBeanInstance實例化Bean

    這篇文章主要為大家介紹了Spring?createBeanInstance實例化Bean源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Spring學(xué)習(xí)之開發(fā)環(huán)境搭建的詳細步驟

    Spring學(xué)習(xí)之開發(fā)環(huán)境搭建的詳細步驟

    本篇文章主要介紹了Spring學(xué)習(xí)之開發(fā)環(huán)境搭建的詳細步驟,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • java設(shè)計模式:建造者模式之生產(chǎn)線

    java設(shè)計模式:建造者模式之生產(chǎn)線

    這篇文章主要介紹了Java設(shè)計模式之建造者模式,結(jié)合具體實例形式分析了建造者模式的概念、原理、實現(xiàn)方法與相關(guān)使用注意事項,需要的朋友可以參考下
    2021-08-08
  • Java內(nèi)存溢出場景及解決方案

    Java內(nèi)存溢出場景及解決方案

    內(nèi)存溢出是Java應(yīng)用開發(fā)中常見的問題,但通過合理的代碼優(yōu)化、內(nèi)存管理以及JVM參數(shù)調(diào)整,我們可以有效地避免和解決這類問題,這篇文章主要介紹了Java內(nèi)存溢出場景及解決辦法,需要的朋友可以參考下
    2024-04-04
  • springboot如何接收application/x-www-form-urlencoded類型的請求

    springboot如何接收application/x-www-form-urlencoded類型的請求

    這篇文章主要介紹了springboot如何接收application/x-www-form-urlencoded類型的請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論