java - Spring HandlerInterceptors 是如何实例化的?

标签 java spring interceptor

每个请求是否有一个新的 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 字段将由所有请求共享。

从这个意义上说,拦截器与 Controller 没有什么不同 - 在将对话状态放入其中时要非常小心,因为对象将在请求之间共享。

如果你真的需要一个有状态的拦截器并且你不想在请求之间共享状态,那么使用 r equest-scoped bean .

关于java - Spring HandlerInterceptors 是如何实例化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7201728/

相关文章:

java - 如何为 JUnit 测试声明 "mixins"?

c# - 在 CaSTLe Windsor 中,我可以注册一个接口(interface)组件并获得实现的代理吗?

java - 使用 Xades Bes 时间戳封装签名

java - 从 Eclipse 更新 HSQLDB 表

java - Java中的无序对

java - Spring MVC 通过表单更新对象

dependency-injection - StructureMap 拦截器

java - 使用 Java api 按日期搜索 Lotus Notes

java - 我可以在 JPA 中使用 @Query 的嵌套查询吗?

java - key 'string1-string2' 的重复条目 'PRIMARY'