[Spring Basic] 빈 스코프
Backend/Spring Basic

[Spring Basic] 빈 스코프

빈은 언제 생성되서 언제까지 유지하는지 여러가지 스코프가 있습니다.

지금부터 어떤 스코프가 있고, 어떤 역할을 하는지 알아보겠습니다.

 

빈 스코프

빈이 존재할 수 있는 범위를 뜻합니다.

다양한 스코프를 지원합니다. request, session, application, websocket 스코프는 spring MVC Web Application에서만 작동합니다. 주로 singleton, prototype, request 스코프를 사용합니다.

singleton 스코프

스프링의 기본 스코프입니다. 스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 스코프입니다.

prototype 스코프

빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 스코프입니다.

request 스코프

웹 요청이 들어오고 나갈때 까지 유지되는 스코프입니다.

session 스코프

웹 세션이 생성되고 종료될 때 까지 유지되는 스코프입니다.

application 스코프

웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프입니다.

websocket 스코프

웹 소켓과 같은 범위로 유지되는 스코프입니다.

 

스코프 등록 방법

@Scope 어노테이션을 사용합니다. 자동 등록, 수동 등록 둘 다 지원합니다.

ComponentScan 자동 등록

@Scope("prototype")
@Component
public class NewBean {}

Config 수동 등록

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

 

싱글톤 스코프

싱글톤 스코프에서는 전에 배웠던 것과 같이 클라이언트 A, B, C가 동일한 타입의 객체를 요청하면

컨테이너는 미리 만들어둔 객체 인스턴스 빈 한개를 반환합니다.

이후에도 같은 요청이 와도 같은 객체 인스턴스 빈을 반환합니다.

즉, 빈을 만들고 DI까지 하며 종료될때 까지 관리합니다.

 

프로토타입 스코프

클라이언트의 요청 이후에 빈 생성 + DI를 수행하고 반환합니다.

컨테이너는 프로토타입 빈을 생성하고, 의존관계 주입, 초기화까지만 처리합니다.

반환 이후 컨테이너는 빈을 관리하지 않습니다. 완전히 책임을 클라이언트에게 넘겨버립니다.

그래서 @PreDestroy 같은 종료 콜백이 호출되지 않습니다.

 

싱글톤 vs 프로토타입

싱글톤 빈은 스프링 컨테이너 생성 시점에 초기화 메서드가 실행 되지만, 프로토타입 스코프의 빈은 스프링 컨테이너에서 빈을 조회할 때 생성되고, 초기화 메서드도 실행됩니다.

싱글톤 빈은 2번 요청해도 이미 생성하고 초기화까지 한 같은 빈을 보여주지만, 프로토타입 빈은 완전히 다른 스프링 빈이 생성되고 초기화됩니다.

싱글톤 빈은 스프링 컨테이너가 관리하기 때문에 스프링 컨테이너가 종료될 때 빈의 종료 메서드가 실행되지만, 프로토타입 빈은 스프링 컨테이너가 생성과 의존관계 주입 그리고 초기화 까지만 관여하고, 더는 관리하지 않기 때문에, 따라서 프로토타입 빈은 스프링 컨테이너가 종료될 때 @PreDestroy 같은 종료 메서드가 전혀 실행되지 않습니다.

 

참고

https://github.com/baksakcci/Spring_Basic

 

GitHub - baksakcci/Spring_Basic: 스프링 기초 학습

스프링 기초 학습. Contribute to baksakcci/Spring_Basic development by creating an account on GitHub.

github.com

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

 

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

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

www.inflearn.com

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-scopes

 

Core Technologies

In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do

docs.spring.io

https://gmlwjd9405.github.io/2018/11/10/spring-beans.html

 

[Spring] Spring Bean의 개념과 Bean Scope 종류 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io