ThreadLocal是什么?

public T get()

public void set(T value)

public void remove()

 1、创建用户上下文实体类

import com.qianxiao.blog.dataobject.UserDO;

public class UserContext {
    // 构造方法私有化
    private UserContext(){};

    private static final ThreadLocal<UserDO> context = new ThreadLocal<>();

    /**
     * 存放用户信息
     * @param userDO
     */
    public static void set(UserDO userDO){
        context.set(userDO);
    }

    /**
     * 获取用户信息
     * @return
     */
    public static UserDO get(){
        return context.get();
    }

    /**
     * 清除当前线程内引用,防止内存泄漏
     */
    public static void remove(){
        context.remove();
    }
}

 2、拦截器中设置用户信息

UserContext.set(userDO);

 3、controller中获取用户信息

System.out.println("userData = " + UserContext.get());

  

SpringBoot使用ThreadLocal线程上下文传递数据_内存泄漏