IT

스프링 컨트롤러의 범위 및 인스턴스 변수

itgroup 2023. 9. 25. 22:35
반응형

스프링 컨트롤러의 범위 및 인스턴스 변수

Spring-MVC의 모든 컨트롤러는 단일 요소이며 서로 다른 세션과 요청 간에 공유됩니까?

만약 그렇다면, 나는 다음과 같은 계급 변수가

public String name;

모든 요청과 세션에서 동일합니까?그러면 사용자 X가 요청을 하면.name폴로 설정되어 있습니까, 사용자 Z도 폴을 속성으로 가지고 있습니까?

제 경우에는 그런 행동을 원하지 않지만 세션/요청 변수를 사용할 수 있는 더 쉬운 또는 더 깨끗한 OOP 방식이 있는지 궁금합니다.session.getAttribute()/request.getAttribute()

첫 번째 질문에 답하자면, 예, Spring MVC 컨트롤러는 기본적으로 싱글톤입니다.개체 필드는 모든 요청과 모든 세션에 대해 공유되고 표시됩니다.

그러나 동기화를 하지 않으면 모든 종류의 동시성 문제(레이스 상태, 가시성)가 발생할 수 있습니다.따라서 당신의 분야는 다음과 같이 해야 합니다.volatile(그리고private, (그런데) 시인성 문제를 피하기 위한 수식어입니다.

주요 질문으로 돌아가: 봄에는 요청-(4.5.4.2 요청 범위 참조) 및 세션 범위(4.5.4.3 세션 범위 참조) 콩을 사용할 수 있습니다.컨트롤러 및 다른 콩(심지어 싱글턴!)에 주입할 수 있지만 Spring은 각 요청/세션에 독립적인 인스턴스가 있는지 확인합니다.

요청 및 세션 범위가 지정된 콩을 싱글턴에 주입할 때 기억해야 할 유일한 사항은 범위가 지정된 프록시로 포장하는 것입니다(예: 종속성으로 4.5.4.5 범위가 지정된 에서 가져온 것).

<!-- an HTTP Session-scoped bean exposed as a proxy -->
<bean id="userPreferences" class="com.foo.UserPreferences" scope="session">

    <!-- instructs the container to proxy the surrounding bean -->
    <aop:scoped-proxy/>
</bean>

예, Spring-MVC의 컨트롤러는 싱글톤입니다.여러 요청 사이에 클래스 변수가 공유되어 모호성이 발생할 수 있습니다.사용가능@Scope("request")이러한 모호성을 방지하기 위해 컨트롤러 위에 주석을 달아야 합니다.

언급URL : https://stackoverflow.com/questions/11139571/scope-of-a-spring-controller-and-its-instance-variables

반응형