빈 스코프란
빈 스코프 : 빈이 존재할 수 있는 범위
스코프 종류
- 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프
- 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여
- 따라서 @preDestruct가 수행되지 않는다.
- 웹 관련 스코프
- request : 웹 요청이 들어오고 나갈 때까지 유지
- session : 웹 세션이 생성되고 종료될 떄까지 유지
- application : 웹의 서블릿 컨텍스트와 같은 범위로 유지
스코프 설정
@Scope("prototype")
@Component
public class ProtoTypeBean{
...
}
프로토타입 스코프
프로토타입 스코프 : 빈 조회를 할 때마다 새로운 인스턴스를 생성해 반환
싱글톤 빈 요청

- 싱글톤 스코프의 빈을 스프링 컨테이너에 요청
- 스프링 컨테이너는 본인이 관리하는 스프링 빈을 반환
- 이후 스프링 컨테이너에 동일한 요청이 와도 동일한 객체 인스턴스를 반환
프로토타입 빈 요청


- 프로토타입 스코프의 빈을 스프링 컨테이너에 요청
- 스프링 컨테이너는 이 시점에 프로토타입 빈을 생성, 의존관계 주입
- 스프링 컨테이너는 생성한 프로토타입 빈을 클라이언트에 반환
- 이후 스프링 컨테이너에 동일한 요청이 올 경우, 항상 새로운 프로토타입 빈을 반환
프로토타입 빈의 특징
- 싱글톤 빈은 스프링 컨테이너 생성 시점에 초기화 메서드가 실행되는 반면, 프로토타입 빈의 경우 컨테이너에서 빈을 조회할 때 생성되고, 초기화 메서드가 실행된다.
- 종료 메서드가 호출되지 않는다.
- 스프링 컨테이너에 요청할 때마다 새로 생성된다.
프로토타입 스코프 - 싱글톤 빈과 함께 사용 시 문제점
싱글톤 빈 내부에서 의존관계 주입을 받아 사용하는 빈이 프로토타입인 경우 문제가 생길 수 있다.
- 싱글톤 빈은 초기 스프링 컨테이너 생성 시점에 함께 생성되고, 의존관계 주입도 이때 받게 된다.
- 이때 프로토타입 빈이 생성되어, 싱글톤 빈에 주입되기 때문에 이후 해당 프로토타입 빈이 싱글톤 빈 내부에서 계속 남아있게 된다.
- 만약 서로 다른 싱글톤 빈에서 각자 프로토타입 빈을 주입 받는다면 서로 다른 프로토타입 빈을 주입받게 된다.



프로토타입 스코프 - Provider
위의 문제를 해결하기 위해서는 싱글톤 빈이 프로토타입 빈을 사용할 때마다 스프링 컨테이너에 요청
- ObjectProvider를 사용해 Dependency Lookup을 수행하도록 코드를 수정
- Dependency Lookup : 의존관계를 외부에서 주입받는 Dependency Injection과 반대로, 내부에서 필요한 의존관계를 직접 찾는 것을 의미
@Autowired
private Provider<PrototypeBean> provider;
public int logic() {
PrototypeBean prototypeBean = provider.get();
prototypeBean.addCount();
int count = prototypeBean.getCount();
return count;
}
- 위와 같이 내부에서 provider를 입력받고, 실제 처리 로직을 실행할 때마다 bean을 조회 후 수행
웹 스코프
웹 환경에서 동작하는 스코프
- 프로토타입과 다르게 해당 스코프의 종료시점까지 관리
- 종료 메서드가 호출된다.
웹 스코프 종류
- request : HTTP 요청 하나가 들어오고 나갈 때까지 유지되는 스코프
- 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리된다.
- session : HTTP Session과 동일한 생명주기를 가지는 스코프
- application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주기를 가지는 스코프
- websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프
request 스코프

'Spring(스프링) 기초' 카테고리의 다른 글
| 빈 생명주기 콜백 (0) | 2023.12.10 |
|---|---|
| 의존관계 자동 주입 (0) | 2023.12.08 |
| 컴포넌트 스캔과 의존관계 자동 주입 (0) | 2023.12.08 |
| 스프링 싱글톤 컨테이너 (0) | 2023.12.08 |
| 스프링 컨테이너와 스프링 빈 (1) | 2023.12.08 |