`

ThreadLocal在spring中的使用

 
阅读更多
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的事务管理

    本文将深入探讨ThreadLocal的使用以及Spring框架中的事务管理,这两个主题都是Java开发人员必须掌握的关键技能。 首先,让我们了解ThreadLocal。ThreadLocal是Java提供的一种线程绑定变量的工具类,它允许我们在一...

    Spring事务处理-ThreadLocal的使用

    在Spring事务管理中,连接池与ThreadLocal结合,确保每个线程在事务内使用的是同一连接,避免了事务间的干扰。例如,`HikariCP`和`C3P0`等流行的连接池实现都支持与Spring事务管理的无缝集成。 在实际应用中,理解...

    Spring定时任务中使用ThreadLocal的坑

    NULL 博文链接:https://bijian1013.iteye.com/blog/2380233

    详解Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失

    本文详解了Spring Cloud中Hystrix线程隔离导致ThreadLocal数据丢失的问题,并通过实例代码演示了该问题的出现原因和解决方法。 知识点1:Hystrix线程隔离 Hystrix是Spring Cloud中的一种断路器实现,用于防止服务...

    ThreadLocal原理及在多层架构中的应用

    - 尽量避免将ThreadLocal用作长期持有的全局变量,尤其是在静态方法或静态变量中使用。 - 避免过度依赖ThreadLocal,因为它可能导致设计上的复杂性和难以维护的问题。 综上所述,ThreadLocal是Java多线程编程中的一...

    ThreadLocal的几种误区

    1. 存储当前会话用户信息:例如,可以在一个线程中使用ThreadLocal保存用户的登录状态,确保每个线程只处理一个用户的信息。 2. 存放上下文变量:如WebWork的ActionContext,它可以保存请求处理过程中的各种上下文...

    ThreadLocal原理及在多层架构中的应用.pdf

    通过ThreadLocal,可以保证这些信息在Action的不同调用中保持一致,即在同一个请求的不同阶段中,即使使用不同的线程去处理,它们依然能访问到相同的上下文信息。 黄老邪,作为京东的资深架构师,拥有近20年的行业...

    ThreadLocal源码分析和使用

    ThreadLocal 的使用非常广泛,例如在 Spring 和 Hibernate 中都大量使用了 ThreadLocal。下面是一个使用 ThreadLocal 的具体例子: ```java public class SequenceNumber{ //通过匿名内部类覆盖 ThreadLocal 的 ...

    使用ThreadLocal管理“session”数据

    在实际开发中,有些框架如Spring已经内置了对ThreadLocal的管理和清理机制,可以更方便地在多线程环境中使用session。 总结,ThreadLocal是Java中处理线程局部数据的利器,特别适用于需要线程隔离的场景,如Web...

    java事务 - threadlocal

    Java事务管理主要体现在JDBC API和一些高级框架如Spring中。在JDBC中,我们可以通过Connection对象的setAutoCommit(false)方法来开启手动提交事务,然后通过commit()或rollback()方法来控制事务的提交或回滚。在...

    java 简单的ThreadLocal示例

    在一些框架或库中,如Spring,ThreadLocal被用来存储线程相关的配置信息。 4. **局部状态:** 在多线程环境中,当每个线程需要有自己的状态(如计数器),ThreadLocal提供了一种优雅的解决方案。 尽管...

    Spring-Reference_zh_CN(Spring中文参考手册)

    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

    ThreadLocal 在 Spring 中发挥着重要的作用,在管理 request 作用域的 Bean、事务管理、任务调度、AOP 等模块都出现了它们的身影,起着举足轻重的作用。要想了解 Spring 事务管理的底层技术,ThreadLocal 是必须...

    ThreadLocal详解

    例如,在Spring的DAO模板类中,尽管底层的数据连接或会话资源是非线程安全的,但是通过使用ThreadLocal,可以为每个线程绑定独立的数据连接或会话,使得多个DAO可以复用同一个模板实例而不会发生资源冲突,极大地...

    Spring中文帮助文档

    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 注解bean

    线程中的操作往往涉及到多线程环境下的资源共享和管理,因此,如何在线程中正确地获取并使用Spring通过注解注入的对象,是一个常见的问题。本文将详细探讨这个主题。 首先,Spring的注解主要分为三类:配置注解(如...

    spring security3 中文版本

    Spring Security 3.0.1 是在 Spring Security 3.0 的基础上进行的一次 bug 修复版本,主要针对先前版本中存在的问题进行了修正。此次版本未引入新的功能,但修正了一些已知的问题,增强了稳定性。 ##### 1.4 获取 ...

    javaweb 通过threadlocal 手动提交事务

    在Java Web应用中,由于每个HTTP请求都在一个独立的线程中处理,我们可以使用ThreadLocal来存储每个请求的事务状态。这样,当请求开始时,我们可以在ThreadLocal中创建一个新的事务,处理过程中,所有对数据库的...

    ThreadLocal的简单理解.doc

    例如,Spring Security 中的 ThreadLocalSecurityContextHolderStrategy 类就是使用 ThreadLocal 来实现的。 三、如何创建一个 ThreadLocal 实例 创建一个 ThreadLocal 实例非常简单,只需要使用 private static ...

Global site tag (gtag.js) - Google Analytics