2011-08-26 22 views
5

¿Hay una nueva instancia de Spring HandlerInterceptors para cada solicitud?¿Cómo se crean instancias de Spring HandlerInterceptors?

Tengo un interceptor en Spring, que tiene un campo de clase.

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"); 
     } 
} 

Si se utiliza este interceptor siempre imprimir "éxito"? (No importa cuántos hilos estén haciendo esto al mismo tiempo?)

Respuesta

5

La forma en que se crea la instancia del interceptor depende de cómo se configure como un bean. Si no especifica explícitamente un alcance para el bean, entonces será un singleton como cualquier otro bean, por lo que el campo state será compartido por todas las solicitudes.

En este sentido, los interceptores no son diferentes a los controladores: tenga mucho cuidado al poner el estado de la conversación en ellos, ya que los objetos se compartirán entre las solicitudes.

si realmente necesita un interceptor con estado y no desea compartir el estado entre las solicitudes, luego use un r equest-scoped bean.

Cuestiones relacionadas