♪ 학습 내용
빈 스코프 / 싱글톤 스코프 / 프로토타입 스코프
* 빈 스코프란 무엇인가
빈 스코프란 무엇인가??
스코프에 대해서는 jsp 맛보기 공부하거나 spring 입문 강의할 때 몇번 듣고 사용해봤는데 사실 잘 모른다.
대충 느낌적으로는 영역? 이정도로 이해하고 있다.
- 스코프는 빈이 존재할 수 있는 범위를 뜻한다.
스코프의 종류는 다음과 같이 다양하다
싱글톤 스코프(디폴트) / 프로토타입 스코프 / 웹 관련 스코프( request, session, application )
등록할 때는 애노테이션을 이용해서
@Scope("singleton" 또는 "prototype")
@Component(자동 등록) 나 @Bean(수동등록) 에 붙는다.
* 싱글톤 스코프
싱글톤 스코프가 바로 우리가 여태 사용해왔던 기본 스코프다.
싱글톤 스코프는 스프링 컨테이너 생성부터 종료까지 스프링 빈이 유지된다.
즉, 싱글톤 스코프의 빈 조회 시 컨테이너가 객체 생성 후 관리하고 있는 항상 같은 인스턴스의 스프링 빈 반환.
( 이제까지 이 개념으로 학습해오기도 했으니 바로 이해 가능했다 )
* 프로토타입 스코프
싱글톤 스코프와는 다르게 조회시에 빈 생성하고 의존관계 주입 및 초기화 호출까지만 관리로, 범위가 짧다.
그 이후로는 스프링 컨테이너가 조회한 외부 클라이언트에게 반환해버리고 더 이상 관리하지 않는다.
like ) 만들어서 던지고 . 만들어서 던지고.
기존 싱글톤 스코프에서 여러 클라이언트에서 조회 시 관리하고 있던 같은 인스턴스를 반환했다면
프로토타입 스코프에서는 항상 새로이 인스턴스 생성하고 반환해준다.
DI 이후로는 스프링이 관리하지 않으므로 반환받는 클라이언트가 책임지고 직접 관리해주어야한다.
ex) 종료 메서드 호출
* 테스트를 통한 싱글톤 / 프로토타입 비교
Singleton 실행 결과 )
같은 인스턴스 반환 된 것을 확인 할 수 있었다.
추가로 종료 메서드인 destroy()까지 호출 된 것 확인.
Prototype 실행 결과 )
Singleton 과는 달리 다른 인스턴스 반환 된 것을 확인 할 수 있었다. ( isNotSame )
물론 ac.close()를 하지 않았지만, 떠나서 종료 메서드가 호출 안되는 것을 확인하였다.
특히 !!
부분을 통하여 프로토타입에서는 빈을 조회할때 생성, 초기화 실행 되는 것을 확인하였다.
** **
추가로 다음과 같을 시에
new AnnotationConfigApplicationContext(내용);
내용에 들어가면 자동으로 컴포넌트 스캔돼서 빈으로 등록되는 것을 알아두자 !
** **
* 요약
프로토타입 빈은 스프링 컨테이너가 생성, DI, 초기화까지만 관여하고 더 이상 관리 x.
따라서 컨테이너 종료 시에 종료 메서드 실행되지 않음
궁금한 점은 이런 프로토타입은 어떤 경우에 사용하는지 궁금하다. 나중가면 나오겠지?
♪ 다음 학습 내용
프로토타입 스코프에서 싱글톤 빈 사용시 발생하는 문제에 대해서
'Dev > Spring' 카테고리의 다른 글
[Spring 기본] 빈 스코프 (3) (0) | 2022.12.18 |
---|---|
[Spring 기본] 빈 스코프 (2) (0) | 2022.11.28 |
[Spring 기본] 빈 생명주기 콜백 (0) | 2022.11.22 |
[Spring 기본] 의존관계 자동 주입 (4) (0) | 2022.11.20 |
[Spring 기본] 의존관계 자동 주입 (3) (0) | 2022.11.19 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!