bean을 정의하는 것은, 실제 인스턴스가 생성될 때 필요한 레시피를 만드는 것이다. bean 정의가 레시피라는 발상은 중요하다. 왜냐하면 하나의 레시피를 통해 많은 객체 인스턴스를 만들어낸다는 뜻이 되기 때문이다.
bean 정의를 통해, 생성된 객체에 다양한 의존성이나 설정값들을 채워넣을 뿐만 아니라 객체의 scope도 제어하게 된다. 이러한 접근은 강력하고 유연하다. 자바 클래스 레벨에서 scope를 설정하는 대신에 설정을 통해 scope를 선택할 수 있기 때문이다. bean들은 다양한 scope 중 하나로 만들어지도록 정의될 수 있다. 스프링 프레임워크는 6가지 scope들을 지원한다. 그중 4가지는 웹 환경인 ApplicationContext에서만 쓸 수 있다. 또한 커스텀한 scope도 만들어낼 수 있다.
다음 테이블은 지원되는 scope들이다.
Scope | 설명 |
singleton | (기본) 각 스프링 IoC 컨테이너에서 single bean의 scope를 'single 객체 인스턴스'로 설정한다. |
prototype | single bean의 scope를 '많은 객체 인스턴스'로 설정한다. |
request | single bean의 scope를 '단일한 HTTP 요청의 라이프사이클'로 설정한다. 즉, 각각의 HTTP request는 각자의 single bean 인스턴스를 갖는다. 오직 ApplicationContext에서만 유효하다. |
session | single bean의 scope를 'HTTP Session의 라이프사이클'로 설정한다. 오직 ApplicationContext에서만 유효하다. |
application | single bean의 scope를 'ServletContext의 라이프사이클'로 설정한다. 오직 ApplicationContext에서만 유효하다. |
websocket | single bean의 scope를 'WebSocket의 라이프사이클'로 설정한다. 오직 ApplicationContext에서만 유효하다. |
※ 스프링 3.0에서는 '쓰레드 scope'도 사용가능하지만 기본 설정은 아니다. 더 많은 정보를 위해서는 'SimpleThreadScope' 문서를 참고하라. 쓰레드 scope 또는 다른 커스텀 scope들을 어떻게 등록하는지 알고 싶다면, 커스텀 scope 사용하기를 참고하라.
'SpringFramework Core - I. IoC 컨테이너 > 5. Bean Scopes' 카테고리의 다른 글
5.4.1. 웹 초기 설정 (0) | 2020.03.19 |
---|---|
5.4. 요청, 세션, 애플리케이션 그리고 웹소켓 Scopes (0) | 2020.03.19 |
5.3. 싱글턴 bean과 프로토타입 bean 사이의 의존성 (0) | 2020.03.19 |
5.2. 프로토타입 Scope (0) | 2020.03.19 |
5.1. 싱글턴 Scope (0) | 2020.03.19 |