본문 바로가기

PROGRAMMING/SPRING

[SPRING] Bean Scope 싱글톤과 프로토타입

빈 스코프

빈이 존재할 수 있는 범위를 뜻한다.

 

Various type of Bean Scope

크게 싱글톤과 프로토 타입이 있고

웹 스코프로 리퀘스트, 세션, 글로벌 세션이 있다.

 

스프링에선 따로 지정하지 않으면 디폴트 생성 옵션인 싱글톤 스코프로 생성이 되어,

빈이 스프링 컨테이너와 라이프 사이클을 같이한다.

 

싱글톤 스코프로 생성된 빈을 조회하면 

어디서 어떻게 호출하든 항상 같은 스프링 빈을 반환 한다.

반면 프로토 타입 스코트로 생성된 빈을 조회하면 스프링 컨테이너에서 항상 새로운 인스턴스를 생성해 반환한다.

 

가장 큰 차이점은 

싱글톤은 생성부터 소멸까지 스프링 컨테이너와 함께한다면

프로토타입으로 선언되면 생성 초기화까지만 스프링 컨테이너가 처리해 반환한다.

이후 스프링 컨테이너가 빈을 관리하지 않기 때문에 소멸은 빈을 조회한 클라이언트가 따로 호출해줘야 한다.


코드

 

디폴트가 singleton이기 때문에 따로 프로토타입으로 생성하려면 @Scope를 써줘야 한다.

 

테스트 케이스

하단에 출력 내용을 확인해 보면

컨테이너를 close 했음에도 destroy가 호출되지 않은 것을 확인할 수 있다.

 

 

참고 링크

https://docs.spring.io/spring-framework/docs/3.0.0.M3/reference/html/ch04s04.html

 

4.4 Bean scopes

The other scopes, namely request, session, and global session are for use only in web-based applications (and can be used irrespective of which particular web application framework you are using, if indeed any). In the interest of keeping related concepts

docs.spring.io