2011-08-26 34 views
5

Có một phiên bản mới của Spring HandlerInterceptors cho mỗi yêu cầu không?Spring HandlerInterceptors được khởi tạo như thế nào?

Tôi có thiết bị chặn trong Spring, có trường lớp.

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

Nếu bộ chặn này được sử dụng sẽ luôn in "Thành công" không? (Không có vấn đề bao nhiêu chủ đề đang làm điều này cùng một lúc?)

Trả lời

5

Làm thế nào bộ chặn được khởi tạo phụ thuộc vào cách bạn cấu hình nó như là một bean. Nếu bạn không chỉ định rõ một phạm vi cho bean, thì nó sẽ là một singleton giống như bất kỳ bean nào khác, và vì vậy trường state sẽ được chia sẻ bởi tất cả các yêu cầu.

Trong ý nghĩa này, các bộ chặn không khác với bộ điều khiển - rất cẩn thận khi đặt trạng thái trò chuyện trong đó, vì các đối tượng sẽ được chia sẻ giữa các yêu cầu.

nếu bạn thực sự cần một trình chặn chặn trạng thái và bạn không muốn chia sẻ trạng thái giữa các yêu cầu, sau đó sử dụng r equest-scoped bean.

Các vấn đề liên quan