Bean scope

초보개발·2021년 12월 17일
0

Spring

목록 보기
25/37

빈 스코프

디폴트 값으로 지정되어 있는 싱글톤 스코프는 스프링 빈은 스프링 컨테이너가 시작될 때 같이 생성되고 종료될 때까지 유지된다. 스프링은 싱글톤이외에도 다양한 스코프를 지원한다.

  • 스코프 : 빈이 존재할 수 있는 범위

스프링 컨테이너가 지원하는 스코프

  • 싱글톤 : 디폴트 값, 스프링 컨테이너 시작과 끝까지 유지되는 가장 넓은 범위의 스코프
  • 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존 관계 주입까지만 관여하는 매우 짧은 범위의 스코프, 따라서 종료 메서드는 호출되지 않는다.
  • 웹 관련 스코프
    • request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프
    • session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프
    • application : 웹 서블릿 컨텍스와 같은 범위로 유지되는 스코프
  • 빈 스코프 지정
// 컴포넌트 스캔 자동 등록
@Scope("prototype")
@Component
public class ExampleBean {}

// 수동 등록
@Scope("prototype")
@Bean
PrototypeBean ExampleBean {
    return new ExampleBean();
}

프로토타입 스코프

싱글톤 스코프의 빈을 조회하는 경우 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다. 반면 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다.

  • 프로토타입 빈 요청
  1. 프로토타입 스코프의 빈을 스프링 컨테이너에 요청
  2. 스프링 컨테이너는 이 시점에 프로토타입 스코프의 빈을 새로 생성하고 필요한 의존 관계를 주입
  3. 스프링 컨테이너는 생성한 프로토타입 빈을 클라이언트에 반환
  4. 이 후 스프링 컨테이너에 같은 요청이 오면 또 다른 프로토타입 빈을 생성해서 반환

정리

  • 스프링 컨테이너는 프로토타입 빈 생성하고 의존관계 주입하고 초기화까지만 처리를 맡아서 한다. 클라이언트에 빈을 반환하고 나서 스프링 컨테이너는 생성된 프로토타입 빈을 관리 하지 않는다. 빈의 관리는 그 프로토타입 빈을 가진 클라이언트가 해야 한다. 따라서 @PreDestory같은 종료 메서드가 호출될 수 없는 구조이다. 종료 메서드 호출도 클라이언트가 직접 수동으로 호출해야 한다.
  • 싱글톤 스코프의 빈은 스프링 컨테이너 생성시 초기화 메서드가 실행 되지만, 프로토타입 스코프의 빈은 스프링 컨테이너에서 빈을 조회할 때 생성되고 초기화 메서드도 실행된다.

0개의 댓글