簡體   English   中英

LocaleContextHolder在服務層是否安全

[英]Is LocaleContextHolder safe in service layer

根據官方文檔,LocaleContextHolder是:

簡單的holder類,它將LocaleContext實例與當前線程相關聯。

所以它與當前thread ,但這是關於Thread線程還是當前請求的線程。

如果它是一個愚蠢的問題,請道歉,我不是一個LocaleContextHolder沒有綁定到HTTP會話或其他東西,以便在任何服務層類中使用是安全的。

如果查看LocaleContextHolder的源代碼,你會發現它有一個ThreadLocal變量(實際上有兩個)

private static final ThreadLocal<LocaleContext> localeContextHolder =
        new NamedThreadLocal<LocaleContext>("Locale context");

您可以閱讀ThreadLocal內容但是為了我們的目的,請將其視為將當前正在執行的線程的ID映射到其泛型類型的對象LocaleContext的數據結構。

Servlet容器有一個用於處理客戶端請求的線程池。 當請求進入時,它將提取其中一個線程並執行您的servlet的service()方法。 使用Spring,這會導致DispatcherServlet執行並調用@Controller的處理程序方法。 這一切都發生在servlet容器選擇的原始Thread中。

所以當你的@Service類'方法被調用時,你仍然在同一個線程中。

所述ThreadLocalLocaleContextHolderset()在某個點早在請求處理,在FrameworkServlet (其為母體的類型DispatcherServlet )方法initContextHolders()通過被稱為processRequest()中的每個的doGet() doPost()等等。方法。 Locale是使用其getLocale()方法從HttpServletRequest構建的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM