Spring/스프링 핵심 원리 - 기본편

[빈 스코프] 스코프 종류(싱글톤, 프로토타입, 웹) & 지정 방법

alsruds 2024. 1. 1. 21:51
🧐강의🧐
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

  • 스프링 빈은 스프링 컨테이너의 시작부터 종료까지 유지된다
  • ∵ 스프링 빈 → 싱글톤 스코프 (기본)
  • 스코프 : 빈이 존재할 수 있는 범위

 

💡스프링이 지원하는 스코프

1. 싱글톤

✅ 기본 스코프

✅ 스프링의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프

✅ 빈 조회 시, 항상 같은 인스턴스의 스프링 빈 반환

 

· 싱글톤 빈 요청 시, 동작 방식

빈 요청 → 빈 반환 → 같은 요청 시, 같은 객체 인스턴스의 스프링 빈 반환

 

 

2. 프로토타입

✅ 프로토타입 빈의 생성과 의존 관계 주입까지 스프링 컨테이너가 관여하는 매우 짧은 범위의 스코프 (+ 초기화)

✅ 빈 조회 시, 항상 새로운 인스턴스 스프링 빈 생성 후 반환

✅ 클라이언트가 빈을 관리하기 때문에, 스프링 컨테이너는 @PreDestroy 같은 종료 메서드 호출 X

 

· 프로토타입 빈 요청 시, 동작 방식

빈 요청 → 빈 생성 & 의존 관계 주입
생성된 빈 반환 → 같은 요청이 와도 항상 새로운 프로토타입 빈 생성 후 반환

 

 

3. 관련

✅ 웹 환경에서만 동작

✅ 스프링의 시작부터 종료까지 유지 → 종료 메서드 호출

☑️ Request : 웹 요청 생성부터 종료까지 유지되는 스코프

☑️ Session : 웹 세션 생성부터 종료까지 유지되는 스코프

☑️ Application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프

☑️ WebSocket : 웹 소켓과 같은 범위로 유지되는 스코프

 

· request scope 동작 방식

HTTP request 요청 당 할당되는 request 스코프

1. 클라이언트 A 요청 → HTTP request 에 따른 객체 할당 (A 전용)

2. 같은 HTTP request 요청 시, 만들어 두었던 객체 반환

3. 클라이언트 B 요청 → HTTP request 에 따른 객체 할당 (B 전용)

 

💡빈 스코프 지정하는 방법

1. 컴포넌트 스캔 자동 등록

@Scope("prototype")

 

2. 수동 등록

@Scope("prototype")
@Bean
PrototypeBean HelloBean() {
	return new HelloBean();
}