每个请求是否都有一个新的 Spring HandlerInterceptors 实例?
我在 Spring 中有一个拦截器,它有一个类字段。
public class MyInterceptor extends HandlerInterceptorAdapter {
Private boolean state = false;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
state = true;
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
if (state == true) {
System.out.println("Success");
}
}
如果使用这个拦截器,它总是打印“成功”吗? (无论有多少线程同时执行此操作?)
拦截器如何实例化取决于您如何将其配置为 bean。如果您没有明确指定该 bean 的范围,那么它将像任何其他 bean 一样是一个单例,因此state
字段将被所有请求共享。
从这个意义上说,拦截器与控制器没有什么不同——在将会话状态放入其中时要非常小心,因为对象将在请求之间共享。
如果你确实需要一个有状态拦截器并且你不想在请求之间共享状态,那么使用 r请求范围的 bean.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)