빈 스코프 - 공식문서

조현근·2022년 11월 14일
0
post-thumbnail

공식문서에 있는 내용을 해석해 이해해보자.

Bean Scopes

원문

bean definition을 정하는 것은, bean definition에 의해 실제 객체가 생성되는 '조리법'을 정하는 것이다. bean definition이 '조리법'이라는 것은 중요하다. 왜냐하면 하나의 '조리법'에 의해 수 많은 객체들이 생성되는 방법을 정하는 것이기 때문이다.

bean definition에 의해 생성되는 객체에 포함되는 다양한 의존성과 설정값을 컨트롤 할 수 있고, 그 객체의 scope 또한 컨트롤 할 수 있다.
이런 방법은 강력하고 유연하다. 왜냐하면 객체의 scope을 자바 클래스 레벨이 아니라 설정을 통해 선택할 수 있다.
bean은 여러개의 scope중 하나로 배포되도록 정의될 수 있다. 스프링은 6개의 scope를 지원한다. 그 중 4개는 web-aware ApplicationContext를 사용할 때만 사용 가능하다. 또한 custom scope를 생성할 수 있다.

Bean Scope의 종류

싱글톤(singleton)

(기본값) Spring IoC 컨테이너 당 한 개의 bean definition을 한 개의 객체로 범위를 지정한다.

프로토타입(prototype)

한 개의 bean definition을 여러개의 객체로 범위를 지정한다.

요청(request)

한 개의 bean definition을 단일 HTTP request로 범위를 지정한다.
즉, 각 HTTP 요청은 single bean definition의 뒤에서 만들어진(????) 자기 자신만의 bean 객체를 가지고 있다.
web-aware Spring ApplicationContext에서만 유효하다.

세션(session)

한 개의 bean definition을 HTTP session의 생명주기로 범위를 지정한다.
web-aware Spring ApplicationContext에서만 유효하다.

어플리케이션(application)

한 개의 bean definition을 ServletContext의 생명주기로 범위를 지정한다.
web-award Spring ApplicationContext에서만 유효하다.

웹소켓(websocket)

한 개의 bean definition을 WebSocket의 생명주기로 범위를 지정한다.
web-award Spring ApplicationContext에서만 유효하다.

추가) SimpleThreadScope

스프링 3.0부터 thread scope를 사용할 수 있다. 기본값은 아니다.

출처

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-scopes
https://velog.io/@probsno/Bean-%EC%8A%A4%EC%BD%94%ED%94%84%EB%9E%80

profile
안녕하세요!

0개의 댓글