Spring Scope 학습 노트

5761 단어 spring
《 Spring 복호화 》 에서 발췌 하 다.
scope 는 IOC 용기 의 대상 이 처 해 야 할 한정 장면 이나 해당 대상 의 생존 공간 을 설명 하 는 데 사용 된다. 즉, IOC 용기 가 대상 이 해당 하 는 scope 에 들 어가 기 전에 이 대상 을 생 성하 고 조립 하 는 것 이다. 이 대상 이 더 이상 이러한 scope 의 한정 에 있 지 않 은 후에 용 기 는 보통 이 대상 을 소각 한다.예 를 들 자!우 리 는 모두 사회 (용기) 에 처 해 있다. 만약 에 중학교 교 사 를 하나의 유형 으로 정의 한다 면 용기 가 이런 유형 을 초기 화 한 후에 중학교 교 사 는 중학교 라 는 장면 에 만 국한 되 고 중 학 교 는 중학교 교사 의 scope 로 볼 수 있다.
 
Spring 용 기 는 처음에 두 가지 bean 의 scope 유형 을 제공 했다. singleton 과 prototype 이지 만 2.0 을 발표 한 후에 다른 세 가지 scope 유형, 즉 request, session 과 global session 유형 을 도입 했다.그러나 이 세 가지 유형 은 제한 이 있어 웹 응용 에서 만 사용 할 수 있다. 즉, 웹 응용 을 지원 하 는 Application Context 에서 만 이 세 개의 scope 를 사용 하 는 것 이 합 리 적 인 것 이다.
bean 의 singleton 이나 scope 속성 을 사용 하여 해당 대상 의 scope 를 지정 할 수 있 습 니 다. 그 중에서 scope 속성 은 XSD 형식의 문서 생명 에서 만 사용 할 수 있 습 니 다. 다음 코드 가 보 여 주 는 형식 과 유사 합 니 다.
DTD
 
<bean id ="mockObject1" class="..." singleton="false" />

 XSD
<bean id ="mockObject1" class="..."   scope="prototype" />

 메모: 이 곳 의 singleton 은 디자인 모드 의 단일 모드 와 다 릅 니 다. singleton 으로 표 시 된 bean 은 용기 로 이러한 유형의 bean 이 같은 용기 에 하나의 공유 인 스 턴 스 만 존재 하도록 보장 합 니 다. 단일 모드 는 같은 Classloader 에 하나의 인 스 턴 스 만 존재 하도록 보장 합 니 다.
Scope:
 
 
1. singleton
singleton 유형의 bean 정 의 는 한 용기 에 하나의 인 스 턴 스 만 존재 합 니 다. 이 유형의 bean 에 대한 의존 은 모두 이 하나의 인 스 턴 스 를 참조 합 니 다. 이것 은 마치 모든 유치원 에 미끄럼 틀 이 있 는 것 처럼 이 유치원 의 어린이 들 이 공동으로 이 미끄럼 틀 을 사용 합 니 다. 유치원 용기 에 있어 미끄럼 틀 은 singleton 의 bean 입 니 다.
또한, singleton 형식의 bean 정 의 는 용기 가 시 작 될 때 부터 그 가 처음으로 요청 을 받 았 을 때 까지 예화 되 기 시작 합 니 다. 용기 가 소각 되 거나 종료 되 지 않 으 면 이 유형의 bean 의 단일 인 스 턴 스 는 계속 생존 합 니 다.
일반적으로 bean 의 scope 를 지정 하지 않 으 면 singleton 은 용기 의 기본 scope 입 니 다. 따라서 다음 세 가지 설정 은 실제 적 으로 같은 효 과 를 얻 을 수 있 습 니 다.
DTD or XSD:
<bean id ="mockObject1" class="..." />

 DTD:
<bean id ="mockObject1" class="..." singleton="true" />

 XSD:
<bean id ="mockObject1" class="..."   scope="singleton" />

 
2 prototype
scope 는 prototype 의 bean 입 니 다. 용 기 는 이 유형의 대상 의 요청 을 받 아들 일 때 매번 새로운 대상 을 다시 생 성하 여 요청 자 에 게 줍 니 다. 이러한 유형의 대상 의 예화 와 속성 설정 등 작업 은 용기 가 담당 하지만 준비 가 완료 되 고 대상 인 스 턴 스 가 요청 자 에 게 돌아 가면 용 기 는 현재 대상 의 인용 을 가지 지 않 습 니 다.청구 자 는 이 대상 의 폐 기 를 포함 하여 현재 대상 의 후계 생명주기 관 리 를 스스로 책임 져 야 한다.즉, 용 기 는 요청 자 대상 의 새로운 인 스 턴 스 를 되 돌려 줄 때마다 이 대상 이 '자 생 자멸' 한 다 는 것 이다.
우 리 는 유치원 의 비 유 를 계속 합 시다. 우 리 는 오늘 사 과 를 나 눌 것 입 니 다!사과 의 bean 의 scope 속성 을 prototype 이 라 고 밝 혔 습 니 다. 모든 어린이 들 이 사 과 를 받 을 때 우 리 는 새로운 사 과 를 그 에 게 보 냅 니 다. 보 낸 후에 어린이 들 이 좋아 하 는 대로 먹 습 니 다. 언제 먹고 싶 을 때 먹 습 니까? 하지만 다 먹 으 면 과일 씨 를 쓰레기통 에 버 려 야 합 니 다!공유 할 수 없 는 대상 유형 에 대해 서 는 scope 를 prototype 으로 정의 해 야 합 니 다. 일반적으로 prototype 이 라 고 밝 힌 bean 은 모두 상태 가 있 습 니 다. 예 를 들 어 모든 고객 정보 로 저 장 된 대상 입 니 다.
prototype 형식의 bean 을 정의 할 수 있 습 니 다:
DTD:
<bean id ="mockObject1" class="..." singleton="false" />

 XSD:
<bean id ="mockObject1" class="..."   scope="prototype" />

 
3、request
request 는 모든 HTTP 요청 에 대해 새로운 bean 을 생 성 하 는 동시에 이 bean 은 현재 HTTP request 에서 만 유효 하 며 인 스 턴 스 를 설정 합 니 다.
request, session, global session 을 사용 할 때 먼저 웹 을 초기 화 하 는 웹. xml 에서 다음 과 같은 설정 을 해 야 합 니 다.
Servlet 2.4 이상 의 웹 용 기 를 사용 하고 있다 면 웹 에 적용 되 는 XML 성명 파일 웹. xml 에 다음 ContextListener 를 추가 하면 됩 니 다. 
<web-app>
   ...
  <listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>
   ...
</web-app>

 Servlet 2.4 이전 웹 용기 라면 javax. servlet. Filter 를 사용 하 십시오. 
<web-app>
 ..
 <filter>
    <filter-name>requestContextFilter</filter-name>
    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
 </filter>
 <filter-mapping>
    <filter-name>requestContextFilter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>
   ...
</web-app>

 이어서 bean 의 역할 영역 을 설정 할 수 있 습 니 다: 
<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>
 
4、session
session 도 메 인 은 모든 HTTP 요청 에 대해 새로운 bean 을 생 성 하 는 동시에 이 bean 은 현재 HTTP session 에서 만 유효 하 며 인 스 턴 스 를 설정 합 니 다.
설정 인 스 턴 스:
request 설정 인 스 턴 스 의 전제 와 마찬가지 로 웹 시작 파일 을 설정 하면 다음 과 같이 설정 할 수 있 습 니 다. 
<bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/>

 
5、global session
global session 역할 영역 은 표준 HTTP Session 역할 영역 과 유사 하지만 portlet 기반 웹 응용 에서 만 의미 가 있 습 니 다.Portlet 규범 은 전역 Session 의 개념 을 정 의 했 고 모든 portlet 웹 응용 을 구성 하 는 다양한 portlet 에 의 해 공유 되 었 다.global session 역할 영역 에서 정 의 된 bean
전역 portlet 에 한정 됨
Session 의 라 이 프 사이클 범위 내.웹 에서 global session 역할 영역 을 사용 하여 bean 을 표시 하면 웹 은 자동 으로 session 형식 으로 사 용 됩 니 다.
설정 인 스 턴 스:
request 설정 인 스 턴 스 의 전제 와 마찬가지 로 웹 시작 파일 을 설정 하면 다음 과 같이 설정 할 수 있 습 니 다. 
<bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/>

 
=======================================================================
이상 자 료 는 인터넷 에서...

좋은 웹페이지 즐겨찾기