SpringMvc問題記錄-Controller對於靜態變量的訪問分析

問題描述

在於朋友的討論中分析到一種場景,即:Controller對於一個類中的靜態變量進行訪問時,若是第一個接口修改該靜態變量的數據,另一個接口獲取該靜態變量的數據,那麼返回的結果是什麼?html

操做步驟是,先進行修改接口的訪問,而後再進行獲取接口的訪問。java

實際驗證

建立一個SpringBoot項目,項目結構以下:

在這裏插入圖片描述

建立Controller接口

package com.taowd.controller;
import com.taowd.util.Constants;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Taoweidong
 */
@RestController
@RequestMapping("/")
public class HelloWorld {

    /**
     * @return
     */
    @PostMapping("/set")
    public String set() {
        //修改操做
        Constants.HELLO_WORLD = "修改以後的數據";
        return "已修改";
    }
    /**
     * @return
     */
    @PostMapping("/get")
    public String get() {
        //獲取操做
        return Constants.HELLO_WORLD;
    }
}

建立靜態變量類

package com.taowd.util;
/**
 * @author Taoweidong
 */
public class Constants {
    /**
     * 靜態常量.
     */
    public static String HELLO_WORLD = "Hello World";
}

測試過程

測試使用postman工具進行接口測試web

第一次訪問get接口查看原數據

http://127.0.0.1:8080/get
在這裏插入圖片描述spring

第二次訪問set接口從新設置靜態變量值

在這裏插入圖片描述

第三次訪問get接口查看靜態變量的值

在這裏插入圖片描述

結果分析

static變量

參考:http://www.javashuo.com/article/p-cyhequdh-dz.htmlspringboot

static變量也稱做靜態變量,靜態變量和非靜態變量的區別是:靜態變量被全部的對象所共享,在內存中只有一個副本,它當且僅當在類初次加載時會被初始化。而非靜態變量是對象所擁有的,在建立對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。app

static成員變量的初始化順序按照定義的順序進行初始化。工具

在Constants類中的HELLO_WORLD變量即被static修飾符修飾,屬於靜態變量,在內存中只有一個副本,當類初次加載時被初始化,後面系統的使用,都是修改查詢這一個副本,所以修改接口被觸發後HELLO_WORLD變量就被修改,而後調用get查詢接口查詢時,獲取的就是修改後的數據。post

參考

歡迎訪問我的博客: http://www.taoweidong.com/測試

相關文章
相關標籤/搜索