[SPRING] Spring MVC는 어떻게 여러 사용자를 다루는가?
SPRINGSpring MVC는 어떻게 여러 사용자를 다루는가?
나는 6 개월 넘게 봄을 사용하고 있습니다. 아래의 시나리오와 관련된 기본 메커니즘을 이해할 수 없습니다.
나는 스프링 웹 앱을 가지고있다. 이제 컨트롤러에서 모델을 자동 실행했습니다. 일치하는 URL을 기반으로 각 메소드를 호출합니다. 내 모든 방법은 싱글 톤입니다.
이제 두 명의 사용자가 동시에 앱을 시작하면 봄을 병렬로 실행하고 결과를 제공 할 수 있습니다. 나는 그것을 어떻게 할 수 있는지 이해하지 못했습니다. 빈은 싱글 톤이므로 빈이 사용되지 않거나 빈의 데이터를 덮어 쓸 때까지 대기해야합니다. 그러나 봄은 제대로 작동하고 있습니다. 누군가가이 비유를 일부 비유로 설명 할 수 있습니까?
내 질문에 명확하게 설명하려면 아래 코드를 작성하십시오.
내 기본 컨트롤러는 간단합니다.
@Autowired
private AppModel aModel;
public AppModel getModel(){
return aModel;
}
public void setModel(AppModel aModel){
this.aModel = aModel;
}
@RequestMapping(method = RequestMethod.GET)
public ModelAndView defaultGetter(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView(getViewName());
mav.addObject("model", aModel);
Runtime.getRuntime().gc();
return mav;
}
또한 어떤 사람은 두 클라이언트가 @autowired를 사용할 때 두 개의 개별 모델이 생성 될 때 앱을 열 때 알려 줄 수 있습니다. 모든 클라이언트에 대해 하나의 모델 bean 만 존재하면 클라이언트 1의 요청이 들어 왔고 결과를 얻기 위해 30 초가 걸린다 고합니다. 이제 두 번째 클라이언트가 3 초 내에 요청을 보내면 첫 번째 클라이언트 요청이 덮어 쓰기됩니까?
나는 혼란스러워하고 있다고 생각합니다. 어떤 사람이이 마법이 어떻게 일어나고 있는지 명확히 할 수 있습니까?
감사
해결법
-
==============================
1.모든 웹 요청은이 스레드에서 설명한대로 새 스레드를 생성합니다.
모든 웹 요청은이 스레드에서 설명한대로 새 스레드를 생성합니다.
Spring은 다양한 범위 (프로토 타입, 요청, 세션, 싱글 톤)를 관리합니다. 두 개의 동시 요청이 싱글 톤 Bean에 액세스하는 경우, Bean은 Stateless (또는 적어도 문제를 피하기 위해 동기화 됨)이어야합니다. | 위 요청에서 bean에 액세스하면 요청 당 새 인스턴스가 생성됩니다. Spring은 이것을 당신을 위해 관리하지만 빈에 대한 올바른 범위를주의 깊게 사용해야한다. 일반적으로 컨트롤러는 싱글 톤이지만 AppModel은 범위 요청이어야하며, 그렇지 않으면 두 개의 동시 요청에 문제가 발생합니다. 이 스레드는 또한 당신을 도울 수 있습니다.
마지막 질문에 대해 "이 마법이 어떻게 발생하고 있습니까?"대답은 "aspect / proxy"입니다. Spring은 프록시 클래스를 만든다. Spring이 AppModel 클래스에 대한 프록시를 생성한다고 상상할 수 있습니다. 컨트롤러에서 액세스하려고하면 Spring은 메소드 호출을 올바른 인스턴스로 전달합니다.
from https://stackoverflow.com/questions/17235794/how-does-spring-mvc-handle-multiple-users by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring, Hibernate 및 C3P0을 사용하여 다중 사용자 웹 응용 프로그램의 연결 풀 관리 (0) | 2018.12.28 |
---|---|
[SPRING] @Bean과 @Autowired의 차이점 (0) | 2018.12.28 |
[SPRING] JasperReports를 Spring MVC와 함께 사용하는 방법? (0) | 2018.12.28 |
[SPRING] 봄 부팅, logback 및 logging.config 속성 (0) | 2018.12.28 |
[SPRING] 여러 메소드 인수에 @Cacheable 키 (0) | 2018.12.28 |