빈 스코프란 ?
스프링은 다음과 같은 다양한 스코프를 지원한다.
-
"싱글톤" : 기본스코프, 가장 넓은 범위의 스코프
-
"프로토 타입" : 매우 짧은 범위의 스코프
- "웹 관련 스코프"
- "request" : 웹 요청이 들어오고 나갈때 까지 유지
- "session" : 웹 세션이 생성되고 종료될 때까지 유지
- "application" : 웹의 서블릿 같은 범위로 유지
-
싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 빈을 반환, "반면에" 프로토타입을 조회하면 항상 새로운 인스턴스 반환
-
프로토 타입 빈의 특징
- 스프링 컨테이너에 요청할 떄 마다 새로 생성
- 종료 메서드가 호출 X
- 빈을 조회한 클라이언트가 관리
- 컨테이너는 빈의 생성과 의존관계 주입, 초기화까지만 관여한다.
-
정리 : "핵심"은 스프링 컨테이너는 프로토 타입 빈을 생성하고, 의존관계 주입, 초기화 까지만 처리한다. ( 관리는 빈을 받은 클라리언트에 있다) -> 그래서 "@PrerDestory같은 종료 메서드"가 호출되지 않는다.
싱글톤 빈과 함께 사용시 문제점
- 클라이언트는 프로토 타입으로 스프링 빈에 호출할때 마다 새롭게 받고싶은데, 싱글톤이 default값이라 문제가있음
- 해결 : Provider로 문제 해결 (잘 사용은 X)
- ObjectFactory, ObjectProvider = 지정한 빈을 찾아주는 서비스
- ObjcetProvider가 ObjectFactory를 상속함으로 Provider가 편의기능이 더 많이 지원한다.
- ObjectProvider<지정한 빈>, .getObject()를 사용해 빈을 찾는다.