spring mvc中它的核心类是DispatcherServlet,
在处理请求时,我们看到它如果掉用了doService方法里的doDispath方法。
protected void doService(HttpServletRequest request, HttpServletResponse response)
throws Exception
{
......
doDispatch(request, response);
......
}
doDispatch 方法中,会去拿RequestContextHolder.getRequestAttributes();
而RequestContextHolder.getRequestAttributes() 方法的实现就是从ThreadLocal中取:
public abstract class RequestContextHolder
{
private static final ThreadLocal requestAttributesHolder = new ThreadLocal();
private static final ThreadLocal inheritableRequestAttributesHolder = new InheritableThreadLocal();
public static RequestAttributes getRequestAttributes()
{
RequestAttributes attributes = (RequestAttributes)requestAttributesHolder.get();
if (attributes == null) {
attributes = (RequestAttributes)inheritableRequestAttributesHolder.get();
}
return attributes;
}
}
从而保证的request 里面value的线程安全。
分享到:
相关推荐
本文将深入探讨ThreadLocal的使用以及Spring框架中的事务管理,这两个主题都是Java开发人员必须掌握的关键技能。 首先,让我们了解ThreadLocal。ThreadLocal是Java提供的一种线程绑定变量的工具类,它允许我们在一...
在Spring事务管理中,连接池与ThreadLocal结合,确保每个线程在事务内使用的是同一连接,避免了事务间的干扰。例如,`HikariCP`和`C3P0`等流行的连接池实现都支持与Spring事务管理的无缝集成。 在实际应用中,理解...
NULL 博文链接:https://bijian1013.iteye.com/blog/2380233
本文详解了Spring Cloud中Hystrix线程隔离导致ThreadLocal数据丢失的问题,并通过实例代码演示了该问题的出现原因和解决方法。 知识点1:Hystrix线程隔离 Hystrix是Spring Cloud中的一种断路器实现,用于防止服务...
- 尽量避免将ThreadLocal用作长期持有的全局变量,尤其是在静态方法或静态变量中使用。 - 避免过度依赖ThreadLocal,因为它可能导致设计上的复杂性和难以维护的问题。 综上所述,ThreadLocal是Java多线程编程中的一...
1. 存储当前会话用户信息:例如,可以在一个线程中使用ThreadLocal保存用户的登录状态,确保每个线程只处理一个用户的信息。 2. 存放上下文变量:如WebWork的ActionContext,它可以保存请求处理过程中的各种上下文...
通过ThreadLocal,可以保证这些信息在Action的不同调用中保持一致,即在同一个请求的不同阶段中,即使使用不同的线程去处理,它们依然能访问到相同的上下文信息。 黄老邪,作为京东的资深架构师,拥有近20年的行业...
ThreadLocal 的使用非常广泛,例如在 Spring 和 Hibernate 中都大量使用了 ThreadLocal。下面是一个使用 ThreadLocal 的具体例子: ```java public class SequenceNumber{ //通过匿名内部类覆盖 ThreadLocal 的 ...
在实际开发中,有些框架如Spring已经内置了对ThreadLocal的管理和清理机制,可以更方便地在多线程环境中使用session。 总结,ThreadLocal是Java中处理线程局部数据的利器,特别适用于需要线程隔离的场景,如Web...
Java事务管理主要体现在JDBC API和一些高级框架如Spring中。在JDBC中,我们可以通过Connection对象的setAutoCommit(false)方法来开启手动提交事务,然后通过commit()或rollback()方法来控制事务的提交或回滚。在...
在一些框架或库中,如Spring,ThreadLocal被用来存储线程相关的配置信息。 4. **局部状态:** 在多线程环境中,当每个线程需要有自己的状态(如计数器),ThreadLocal提供了一种优雅的解决方案。 尽管...
6.8.1. 在Spring中使用AspectJ来为domain object进行依赖注入 6.8.1.1. @Configurable object的单元测试 6.8.1.2. 多application context情况下的处理 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来...
ThreadLocal 在 Spring 中发挥着重要的作用,在管理 request 作用域的 Bean、事务管理、任务调度、AOP 等模块都出现了它们的身影,起着举足轻重的作用。要想了解 Spring 事务管理的底层技术,ThreadLocal 是必须...
例如,在Spring的DAO模板类中,尽管底层的数据连接或会话资源是非线程安全的,但是通过使用ThreadLocal,可以为每个线程绑定独立的数据连接或会话,使得多个DAO可以复用同一个模板实例而不会发生资源冲突,极大地...
6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...
线程中的操作往往涉及到多线程环境下的资源共享和管理,因此,如何在线程中正确地获取并使用Spring通过注解注入的对象,是一个常见的问题。本文将详细探讨这个主题。 首先,Spring的注解主要分为三类:配置注解(如...
Spring Security 3.0.1 是在 Spring Security 3.0 的基础上进行的一次 bug 修复版本,主要针对先前版本中存在的问题进行了修正。此次版本未引入新的功能,但修正了一些已知的问题,增强了稳定性。 ##### 1.4 获取 ...
在Java Web应用中,由于每个HTTP请求都在一个独立的线程中处理,我们可以使用ThreadLocal来存储每个请求的事务状态。这样,当请求开始时,我们可以在ThreadLocal中创建一个新的事务,处理过程中,所有对数据库的...
例如,Spring Security 中的 ThreadLocalSecurityContextHolderStrategy 类就是使用 ThreadLocal 来实现的。 三、如何创建一个 ThreadLocal 实例 创建一个 ThreadLocal 实例非常简单,只需要使用 private static ...