UserHolder 是干嘛的?它就是一个工具类,作用只有一个:在同一个请求里,随时随地获取当前登录的用户信息。背后原理是ThreadLocal,每个请求是一个独立线程,互不干扰。(1)拦截器把用户存进去(2)你的业务代码(秒杀、下单、支付)直接取出来(3)不用到处传userId,也不用反复查数据库UserHolder 工具类public class UserHolder { // 每个请求线程独立存储 private static final ThreadLocalUser USER_THREAD_LOCAL = new ThreadLocal(); // 拦截器里:保存当前用户 public static void setUser(User user) { USER_THREAD_LOCAL.set(user); } // 业务里:获取当前登录用户 public static User getUser() { return USER_THREAD_LOCAL.get(); } // 请求结束:移除,防止内存泄漏 public static void removeUser() { USER_THREAD_LOCAL.remove(); } }它和拦截器怎么配合?前端发请求,带上 token登录拦截器先执行解析 token查到用户调用UserHolder.setUser(user)存起来进入你的秒杀方法直接UserHolder.getUser()拿到当前登录用户请求结束拦截器调用UserHolder.removeUser()清理内存登录拦截器import org.springframework.web.servlet.HandlerInterceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginInterceptor implements HandlerInterceptor { // 1. 请求进入Controller之前执行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 1. 前端把 token 放在请求头里,比如 header: token String token