首页 > 其他分享 > Filter与ThreadLocal的使用(笔记)

Filter与ThreadLocal的使用(笔记)

时间:2023-02-09 11:04:29浏览次数:38  
标签:Exception param throws Filter ThreadLocal handler 笔记 public

@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加自定义拦截器
registry.addInterceptor(new CartInterceptor()).addPathPatterns("/**");
}
}
public class CartInterceptor implements HandlerInterceptor {

//线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据
public static ThreadLocal threadLocal = new ThreadLocal();

/**
* 目标方法前执行
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

System.out.println("业务逻辑~");
Map<String,Object> data = new HashMap<>();
threadLocal.set(data);
return true;
}

//只要是同一线程,都可以使用threadLocal.get();获取当前线程变量

/**
* 任务执行之后
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
/**
* ThreadLocal set时是Entry(key, value)set进ThreadLocalMap,
* 而Entry是extends WeakReference<ThreadLocal<?>>的,
* 所以当ThreadLocal=null时,GC会把ThreadLocal回收,但是Thread不死,ThreadLocalMap就会一直存在 ,
* GC把ThreadLocal回收后,ThreadLocalMap还存在一条无用的信息(key没了,value还在),
* 这样就造成了内存泄漏,所以在ThreadLocal使用完成后,请调用remove方法
*/
threadLocal.remove();
}

/**
* 视图渲染之后
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

}
}


标签:Exception,param,throws,Filter,ThreadLocal,handler,笔记,public
From: https://blog.51cto.com/gugu/6046065

相关文章

  • 【学习笔记】Http请求方法总结
    Http常用请求方法对比请求方法常见参数传递方式是否幂等说明API举例GETURL,注意:Http协议对URL长度没有限制,所谓的限制是浏览器和处理服务器的幂等用于查询......
  • Linux基础课:第七章笔记--管道,环境变量与常用变量
    开始第七章的学习。技术都是手段,目标是最短的时间内,将学到的知识转化成想要的东西。y总金句:如果想在35岁之前出人头地,能正常工作的不过十来年,那么现在就应该好好学习,工作......
  • PyQt5-快速上手笔记-03
    盒布局fromPyQt5.QtWidgetsimportQWidget,QPushButtonfromPyQt5.QtWidgetsimportQHBoxLayout,QVBoxLayoutclassmyWidget(QWidget):def__init__(self):......
  • Filter细节_过滤器拦截方式配置
    Fitter-细节-过滤器拦截方式配置  拦截方式配置:资源被访问的方式注解配置:设置dispatcherTypes属性1.REQUEST:默认值。浏览器直接请求资源......
  • Java笔记
    编译型语言使用专门的编译器一次性编译所有代码,并包装成该平台能识别的可执行性程序的格式运行效率高,可移植性差C,C++,Objective-C解释性语言使用解释器逐行......
  • 读Java实战(第二版)笔记05_Collection API的增强功能
    1. 集合工厂1.1. Arrays.asList()1.1.1. 创建了一个固定大小的列表1.1.2. 列表的元素可以更新1.1.3. 不能增加或者删除1.1.4. 大小固定的可变数组1.2. 没有A......
  • Webots学习笔记(一) 基本概念
    最近准备学习webots,看了一下网络上没有什么特别好的教程,估计只能跟着官方的手册WebotsUserGuide和WebotsReferenceManual来进行学习了。Webots仿真的基本要素worldf......
  • PyQt5-快速上手笔记-02
    状态栏状态栏是用来显示应用状态信息的组件fromPyQt5.QtWidgetsimportQMainWindowclassmyWidget(QMainWindow):def__init__(self):super().__init_......
  • 《Rust权威指南》学习笔记——4. 认识所有权
    Rust权威指南学习笔记——认识所有权什么是所有权1.所有权规则Rust中的每一个值都有一个对应的变量作为它的所有者。在同一时间内,值有且仅有一个所有者。当所有者离......
  • 2-SAT-学习笔记
    基本知识复习https://oi-wiki.org/graph/2-sat/模板【模板】2-SAT问题#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=2e6+5;......