복붙노트

[SPRING] 스프링 MVC 컨트롤러는 싱글 톤입니까?

SPRING

스프링 MVC 컨트롤러는 싱글 톤입니까?

Spring 3 MVC @Controller에 관한 질의가 있습니다. 요청이 들어 오면, 컨테이너는 각 요청 (Struts 2 - ThreadLocal ActionContext의 액션과 유사)에 대해 컨트롤러의 새로운 인스턴스를 생성합니까 아니면 단일 인스턴스가 모든 요청에 ​​응답합니까? 기본적으로 컨텍스트에서 컨트롤러 bean은 싱글 톤입니까?

Spring 3 MVC 애플리케이션의 가이드 라인 / 모범 사례는 무엇입니까? 이 설정을 구성 할 수 있습니까? 구성해야합니까? 내 환경이 클러스터 된 환경이라면 많은 변화가 있습니까? jvm / 컨테이너가 다르기 때문에 그렇게해서는 안됩니다.하지만 일부 권위있는 제안을 환영합니다.

Spring 설명서를 읽었지만 아마 놓쳤습니다. 어떤 '이것은 우리가 일종의'answer / pointers / links를 구현하는 방법이다. 감사.

해결법

  1. ==============================

    1.Spring 컨트롤러는 서블릿과 마찬가지로 싱글 톤 (웹 애플리케이션 당 각 컨트롤러의 인스턴스가 하나만 있습니다)입니다. 일반적으로이 동작을 변경하는 것은 중요하지 않습니다 (가능한 경우). 일반적인 함정에 대해서는 서블릿의 스레드 안전에 관해서는 컨트롤러에 적용하기를 참조하십시오.

    Spring 컨트롤러는 서블릿과 마찬가지로 싱글 톤 (웹 애플리케이션 당 각 컨트롤러의 인스턴스가 하나만 있습니다)입니다. 일반적으로이 동작을 변경하는 것은 중요하지 않습니다 (가능한 경우). 일반적인 함정에 대해서는 서블릿의 스레드 안전에 관해서는 컨트롤러에 적용하기를 참조하십시오.

    응용 프로그램이 클러스터 된 경우 가능한 한 상태를 피하십시오. 컨트롤러의 상태는 스레드 문제를 피하기 위해 동기화가 필요합니다. 또한 서버를 통해 해당 상태를 복제 할 수도 있습니다. 비용이 많이 들고 번거로 롭습니다.

  2. ==============================

    2.Struts2 액션은 상태를 전달하기 때문에 싱글 톤이 아닙니다. Struts2는 액션 자체에 대해 javabeans 속성을 활용하여 들어오는 요청 데이터를 전달하고이를 프레임 워크의 다양한 레이어에 표시합니다.

    Struts2 액션은 상태를 전달하기 때문에 싱글 톤이 아닙니다. Struts2는 액션 자체에 대해 javabeans 속성을 활용하여 들어오는 요청 데이터를 전달하고이를 프레임 워크의 다양한 레이어에 표시합니다.

    반면에 Spring은 컨트롤러에 넘겨주는 모델 객체를 사용합니다. 컨트롤러 자체는 상태를 유지하지 않으므로 싱글 톤이 적합합니다.

  3. ==============================

    3.컨트롤러는 싱글 톤이기 때문에 웹 애플리케이션이 많은 요청을 동시에 처리하는 경우 new 키워드로 인스턴스를 많이 생성하는 것을 피할 수 있습니다. 컨트롤러 싱글 톤을 사용하면 젊은 GC를 줄여 JVM의 부담을 덜어 줄 수 있습니다.

    컨트롤러는 싱글 톤이기 때문에 웹 애플리케이션이 많은 요청을 동시에 처리하는 경우 new 키워드로 인스턴스를 많이 생성하는 것을 피할 수 있습니다. 컨트롤러 싱글 톤을 사용하면 젊은 GC를 줄여 JVM의 부담을 덜어 줄 수 있습니다.

  4. ==============================

    4.기본적으로 스프링 빈은 싱글 톤입니다. Spring은 콘트롤러와 DAO와 같은 상태없는 빈에 싱글 톤을 사용하고 Stateful 빈에 대해서는 프로토 타입 범위를 사용할 것을 제안합니다.

    기본적으로 스프링 빈은 싱글 톤입니다. Spring은 콘트롤러와 DAO와 같은 상태없는 빈에 싱글 톤을 사용하고 Stateful 빈에 대해서는 프로토 타입 범위를 사용할 것을 제안합니다.

  5. from https://stackoverflow.com/questions/11508405/are-spring-mvc-controllers-singletons by cc-by-sa and MIT license