Springmvc httprequest 使用@Autowired註解是否單例的解釋
阿新 • • 發佈:2018-11-07
引用:
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中,然後去取,所以這樣寫程式碼是沒有問題的,但是建議使用方法級別的注入。