Dre*_*mer 8 java spring spring-mvc
根据官方文档,LocaleContextHolder是:
简单的holder类,它将LocaleContext实例与当前线程相关联.
所以它与当前有关thread
,但这是关于Thread
线程还是当前请求的线程.
如果它是一个愚蠢的问题,请道歉,我不是一个LocaleContextHolder没有绑定到HTTP会话或其他东西,以便在任何服务层类中使用是安全的.
Sot*_*lis 13
如果你查看源代码LocaleContextHolder
,你会发现它有一个ThreadLocal
变量(实际上有两个)
private static final ThreadLocal<LocaleContext> localeContextHolder =
new NamedThreadLocal<LocaleContext>("Locale context");
Run Code Online (Sandbox Code Playgroud)
您可以阅读有关内容ThreadLocal
但是为了我们的目的,请将其视为将当前正在执行的线程的ID映射到其泛型类型的对象的数据结构LocaleContext
.
Servlet容器有一个用于处理客户端请求的线程池.当请求进入时,它将提取其中一个线程并执行您的servlet service()
方法.使用Spring,这会导致DispatcherServlet
执行并@Controller
调用您的处理程序方法.这一切都发生在Thread
servlet容器选择的原始版本中.
所以当你的@Service
类'方法被调用时,你仍然在同一个线程中.
的ThreadLocal
在LocaleContextHolder
是set()
在某一时刻早在请求处理,在FrameworkServlet
(这是父类型DispatcherServlet
)方法initContextHolders()
由被称为processRequest()
在每个doGet()
,doPost()
等方法.它Locale
是HttpServletRequest
用它的getLocale()
方法构建的.
归档时间: |
|
查看次数: |
1957 次 |
最近记录: |