RequestContextHolder的簡單使用&&RequestContextHolder源碼簡單解析&&processRequest源碼簡單解析

RequestContextHolder持有上下文的Request容器,可以通過RequestContextHolder的靜態方法getRequestAttributes()獲取Request相關的變量,如request, response等。

RequestAttributes ra = RequestContextHolder.getRequestAttributes();
HttpServletRequest request =((ServletRequestAttributes)ra).getRequest();

通過這種方式,就不需要在接收或傳遞參數的時候通過定義HttpRequest或HttpResponse來獲取參數了。

在一個web項目中,我們常常需要獲取請求request和響應response,獲取到HttpServletRequest對象還是比較常見的;
有兩種方式來獲取HttpServletRequest:
1、將HttpServletRequest作爲方法的參數從Controller層一直放下傳遞,這樣太繁瑣也很麻煩,如果只是需要獲取HttpServletRequest,不推薦使用第一種;
2、使用RequestContextHolder,可以通過 RequestContextHolder.getRequestAttributes()來獲取RequestAttributes對象,再通過getRequest()獲取的對象向下轉型,如上面的代碼;

這裏直接看看RequestContextHolder源碼

public abstract class RequestContextHolder  {
 
    private static final ThreadLocal<RequestAttributes> requestAttributesHolder =
            new NamedThreadLocal<RequestAttributes>("Request attributes");
 
    private static final Thread
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章