ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

拦截器&线程变量副本(ThreadLocal)

2021-10-26 16:03:47  阅读:144  来源: 互联网

标签:副本 变量 ThreadLocal 拦截器 用于 线程


拦截器是spring提供的一种技术,他的功能类似与过滤器Filter, 他会在进入控制层Controller之前,离开Controller之后以及渲染完毕之后进行拦截

拦截器对比过滤器:

  1. 二者规范不同: filter是在规范中定义,用于servlet容器中.拦截器是spring框架提供的,用于spring容器内
  2. 使用范围不同: filter是servlet规定的,只能用于web工程中.拦截器没有限制

拦截器使用步骤:

  1. 自定义一个类实现HandlerInterceptor接口
  2. 实现HandlerInterceptor接口中的三个方法
    1. preHandle() : 在目标方法之前执行,一般用于预处理
    2. postHandle() : 在目标方法执行之后执行,用于后处理
    3. afterCompletion() : 整个请求处理完毕,在视图渲染完毕时回调,用于资源的清理或性能的统计
  3. 在SpringBoot中注册拦截器并使用: 可以创建一个类作为web注册拦截器实现WebMvcConfigurer接口,注入自定义的拦截器,配置拦截和过滤拦截的路径

 

ThreadLocal---线程变量副本: ---面试

每个线程用于本地变量的副本,各个线程之间的变量互不干扰.

ThreadLocal实现在多线程环境下 保存变量的安全

作用:

  1. 通过线程内的局部变量,这种变量只在线程的生命周期内起作用
  2. 提供一个线程内的公共变量(比如本次请求的用户信息),减少同一个线程内多个函数或者组件之间的一些公共变量传递的复杂度,或者为线程提供一个私有的变量副本,这样每一个线程都可以随意修改自己的变量副本,而不会对线程产生影响

Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量。

采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突。

ThreadLocal类中维护一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值为对应线程的变量副本。

ThreadLocal在Spring中发挥着巨大的作用,在管理Request作用域中的Bean、事务管理、任务调度、AOP等模块都出现了它的身影。

Spring中绝大部分Bean都可以声明成Singleton作用域,采用ThreadLocal进行封装,因此有状态的Bean就能够以singleton的方式在多线程中正常工作了。

 

标签:副本,变量,ThreadLocal,拦截器,用于,线程
来源: https://blog.csdn.net/weixin_61300833/article/details/120974076

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有