빈 스코프(Bean Scope)
는 빈이 존재하는 범위(등록부터 소멸까지)를 의미합니다. 스프링 프레임워크에서 지원하는 빈 스코프는 다음과 같은 여섯 가지의 종류가 있습니다.
빈 스코프는 @Scope("스코프")
어노테이션을 통해서 지정할 수 있습니다. 기본값은 싱글톤(singleton)
을 갖습니다.
request, session, application, websocket
은 웹 환경에서만 유효한 스코프입니다.
싱글톤
은 언급했듯이 기본값으로 가지는 스코프입니다. 컨테이너가 시작될 때 빈이 등록되고, 컨테이너가 종료될 때 같이 소멸되는 스코프입니다.
싱글톤
은 빈이 단일 인스턴스로 관리되기 때문에 동일 요청에 대해서 항상 같은 빈을 반환합니다. 즉, 등록부터 소멸까지 단 하나의 빈이 사용됩니다.
프로토타입
은 스프링 컨테이너가 빈의 생성과 주입까지만 관리하는 짧은 범위의 스코프입니다. 그래서 빈 초기화 메소드는 호출이 가능하지만 소멸 메소드는 호출할 수 없다는 특징이 있습니다.
만약 빈 관리나 소멸 메소드를 사용하고 싶다면 클라이언트측 코드에 따로 빈 관리/소멸에 대한 내용을 작성해야합니다.
프로토타입 스코프 빈
은 요청이 온 시점에 빈을 생성합니다.
또 다른 특징으로는 해당 빈의 요청이 있을 때마다 새로운 인스턴스를 생성합니다.
request, session, application, websocket
은 웹 환경의 스프링 컨테이너에만 적용할 수 있는 스코프입니다. 웹 스코프들은 스코프 범위 동안 스프링 컨테이너가 빈을 관리해주기에 초기화 메소드와 종료 메소드를 모두 호출할 수 있습니다.
Servlet Context Lifecycle
- 서블릿 생성(로딩)
- 서블릿 초기화
- 요청 처리
- 서블릿 소멸