gpt4 book ai didi

java - LocaleContextHolder在服务层安全吗

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:10 25 4
gpt4 key购买 nike

根据官方文档,LocaleContextHolder 是:

Simple holder class that associates a LocaleContext instance with the current thread.

所以它是绑定(bind)到当前thread,但是这是在谈论Thread线程还是当前请求的线程。

如果这是一个愚蠢的问题,我深表歉意,我不确定 LocaleContextHolder 是否绑定(bind)到 HTTP session 或其他东西,以便在任何服务层类中使用它都是安全的。

最佳答案

如果您查看 LocaleContextHolder 的源代码,你会注意到它有一个 ThreadLocal变量(实际上有两个)

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

您可以阅读关于 ThreadLocal 的内容但为了我们的利益,将其视为一种数据结构,将当前执行线程的 ID 映射到其通用类型的对象,LocaleContext在这里。

Servlet 容器有一个线程池,用于处理客户端请求。当请求到来时,它将提取这些线程之一并执行您的 servlet 的 service()。方法。使用 Spring,这会导致 DispatcherServlet执行和你的 @Controller的处理程序方法被调用。这一切都发生在原来的 Thread 中servlet 容器选择。

所以当你的 @Service类的方法被调用,你仍然在同一个线程中。

ThreadLocalLocaleContextHolderset()在请求处理的早期阶段,在 FrameworkServlet 中(这是 DispatcherServlet 的父类型)方法 initContextHolders()processRequest() 调用在每个doGet() , doPost()等方法。 Locale是从 HttpServletRequest 构建的及其 getLocale()方法。

关于java - LocaleContextHolder在服务层安全吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18643986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com