1. 程式人生 > >Springmvc httprequest 使用@Autowired註解是否單例的解釋

Springmvc httprequest 使用@Autowired註解是否單例的解釋

引用:
springmvc httprequest 使用@Autowired註解
SpringMVC在Controller層中注入request的坑

對於Springmvc httprequest 使用@Autowired註解全域性變數有個疑問,就是註解後每次的httprequest 是不是都一樣的了?然後會不會引發多執行緒問題?

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController{

    @Autowired
    HttpServletRequest request;//這樣使用,request每次進來都是Current Request

    @RequestMapping("/test")
    public void test(){
         System.out.println("test  request:"+request.hashCode());
         System.out.println("test "+request.getParameter("name"));
    }    
    //方法級別的注入
   @RequestMapping("/test2")
    public void test(HttpServletRequest request2){
         System.out.println("test2  request2:"+request2.hashCode());
         System.out.println("test2 "+request2.getParameter("name"));
    }  

}

跟蹤原始碼,發現當前注入每次Current Request,然後這個request其實儲存在一個ThreadLocal中的,這樣其實它的底層實現方法就是針對每次來的request都儲存在一個ThreadLocal中,然後去取,所以這樣寫程式碼是沒有問題的,但是建議使用方法級別的注入。