녕의 학습 기록

[Spring 기본] 빈 스코프 (1) 본문

Dev/Spring

[Spring 기본] 빈 스코프 (1)

kjyyjk 2022. 11. 25. 02:28

 학습 내용 

빈 스코프 / 싱글톤 스코프 / 프로토타입 스코프


* 빈 스코프란 무엇인가

 

빈 스코프란 무엇인가??

 

스코프에 대해서는 jsp 맛보기 공부하거나 spring 입문 강의할 때 몇번 듣고 사용해봤는데 사실 잘 모른다.

대충 느낌적으로는 영역? 이정도로 이해하고 있다.

 

- 스코프는 빈이 존재할 수 있는 범위를 뜻한다.

 

스코프의 종류는 다음과 같이 다양하다

 

싱글톤 스코프(디폴트) / 프로토타입 스코프 / 웹 관련 스코프( request, session, application )

 

등록할 때는 애노테이션을 이용해서

 

@Scope("singleton" 또는 "prototype")

@Component(자동 등록) 나 @Bean(수동등록) 에 붙는다.

 

 

* 싱글톤 스코프

 

싱글톤 스코프가 바로 우리가 여태 사용해왔던 기본 스코프다.

 

싱글톤 스코프는 스프링 컨테이너 생성부터 종료까지 스프링 빈이 유지된다.

 

즉, 싱글톤 스코프의 빈 조회 시 컨테이너가 객체 생성 후 관리하고 있는 항상 같은 인스턴스의 스프링 빈 반환.

( 이제까지 이 개념으로 학습해오기도 했으니 바로 이해 가능했다 )

 

* 프로토타입 스코프

 

싱글톤 스코프와는 다르게  조회시에 빈 생성하고 의존관계 주입 및 초기화 호출까지만 관리로, 범위가 짧다.

 

그 이후로는 스프링 컨테이너가 조회한 외부 클라이언트에게 반환해버리고 더 이상 관리하지 않는다.

 

like ) 만들어서 던지고 . 만들어서 던지고.

 

기존 싱글톤 스코프에서 여러 클라이언트에서 조회 시 관리하고 있던 같은 인스턴스를 반환했다면

 

프로토타입 스코프에서는 항상 새로이 인스턴스 생성하고 반환해준다.

 

조회 요청이 들어오면 !! 그제서야 생성한다

 

DI 이후로는 스프링이 관리하지 않으므로 반환받는 클라이언트가 책임지고 직접 관리해주어야한다.

ex) 종료 메서드 호출

 

 

* 테스트를 통한 싱글톤 / 프로토타입 비교

Singleton

 

Singleton 실행 결과 )

같은 인스턴스 반환 된 것을 확인 할 수 있었다.

추가로 종료 메서드인 destroy()까지 호출 된 것 확인.

 

Prototype

Prototype 실행 결과 )

Singleton 과는 달리 다른 인스턴스 반환 된 것을 확인 할 수 있었다. ( isNotSame )

물론 ac.close()를 하지 않았지만, 떠나서 종료 메서드가 호출 안되는 것을 확인하였다.

 

특히 !!

부분을 통하여 프로토타입에서는 빈을 조회할때 생성, 초기화 실행 되는 것을 확인하였다.

 

 

** **

추가로 다음과 같을 시에

new AnnotationConfigApplicationContext(내용);

내용에 들어가면 자동으로 컴포넌트 스캔돼서 빈으로 등록되는 것을 알아두자 !

** **

 

* 요약

 

프로토타입 빈은 스프링 컨테이너가 생성, DI, 초기화까지만 관여하고 더 이상 관리 x.

 

따라서 컨테이너 종료 시에 종료 메서드 실행되지 않음

 

궁금한 점은 이런 프로토타입은 어떤 경우에 사용하는지 궁금하다. 나중가면 나오겠지?

 


 다음 학습 내용 

 

프로토타입 스코프에서 싱글톤 빈 사용시 발생하는 문제에 대해서

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com