스프링 컨트롤러의 범위 및 인스턴스 변수
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
'IT' 카테고리의 다른 글
특정 페이지 템플릿에 add_filter를 사용하려면 어떻게 해야 합니까? (0) | 2023.10.05 |
---|---|
MySql 타임스탬프 열을 PHP의 현재 타임스탬프로 업데이트하는 방법은 무엇입니까? (0) | 2023.09.25 |
Excel 2007 조건부 포맷 - 셀 컬러를 얻는 방법은? (0) | 2023.09.25 |
$.각 () 대 () 루프 - 및 성능 (0) | 2023.09.25 |
예외 발생 시 데이터베이스 연결을 닫는 최상의 설계 패턴 (0) | 2023.09.25 |