programing

Spring MVC는 여러 사용자를 어떻게 처리합니까?

itmemos 2023. 7. 31. 21:06
반응형

Spring 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를 사용할 때 두 명의 클라이언트가 앱을 열었을 때 두 개의 개별 모델이 생성될 것입니다. 모든 클라이언트에 대해 하나의 모델만 존재한다면 클라이언트 1의 요청이 들어왔고 결과를 얻는 데 30초가 걸린다고 말해주세요.이제 두 번째 클라이언트가 3초 안에 요청을 보내면 첫 번째 클라이언트 요청이 덮어쓰게 됩니까?

제가 헷갈리는 것 같아요.누가 이 마법이 어떻게 일어나고 있는지 설명해 줄 수 있나요?

감사해요.

모든 웹 요청은 이 스레드에 설명된 대로 새 스레드를 생성합니다.

Spring은 다양한 범위(프로토타입, 요청, 세션, 싱글톤)를 관리합니다.두 개의 동시 요청이 단일 톤 빈에 액세스하는 경우 빈은 상태 비저장(또는 문제를 방지하기 위해 적어도 동기화됨)이어야 합니다.범위 내 요청에 액세스하면 요청별로 새 인스턴스가 생성됩니다.봄은 여러분을 위해 이것을 관리하지만 여러분은 조심하고 여러분의 콩에 맞는 정확한 범위를 사용해야 합니다.일반적으로 컨트롤러는 싱글톤이지만,AppModel범위가 있어야 합니다.request그렇지 않으면 두 개의 동시 요청에 문제가 발생합니다.이 스레드도 도움이 될 수 있습니다.

마지막 질문 "어떻게 이 마법이 발생하고 있습니까?"에 대한 대답은 "측면/대리"입니다.봄에 프록시 클래스를 만듭니다.당신은 스프링이 당신의 대리인을 만들 것이라고 상상할 수 있습니다.AppModel클래스. 컨트롤러에서 액세스를 시도하는 즉시 Spring이 메서드 호출을 올바른 인스턴스로 전달합니다.

언급URL : https://stackoverflow.com/questions/17235794/how-does-spring-mvc-handle-multiple-users

반응형