몰입하며 나아가는 개발이란

Language/Java

Bean scope

류하을 2022. 5. 21. 10:00

Bean scope

Bean Life Cycle

Bean Life Cycle은 기본적으로 생성, 의존 설정, 초기화, 소멸의 단계를 갖는다. 하지만 어떤 컨테이너를 사용하느냐 에 따라 차이가 있으며 Bean Factory는 기본적인 의존성 주입을 지원하는 가장 간단한 형태의 컨테이너이고, getBean() 메서드가 호출될 때까지 Bean의 생성을 미루게 구성 되어있다. Application Context는 BeanFactory를 상속한 형태로 BeanFactory의 모든 기능을 가지며 추가적인 기능을 가지는 컨테이너 이고 Application context는 context가 시작하기 전에 모든 Bean을 생성하고 로딩해서, 원하는 시기에 언제든지 가져다가 쓸 수 있다.

빈 스코프

Spring에서 별도의 설정을 하지 않을 경우 default bean scope는 singleton으로 구성됨.

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

@Service
@Scope("singletone")
public class MemberService {
    // service logic
}
  • singleton
  • prototype
    • 애플리케이션 요청 시(getBean() 호출 될 때) 스프링이 새 instance 생성.
  • request
    • HTTP 요청 별로 instance 화 되며 요청이 끝나면 소멸됨.
  • session
    • HTTP session 별로 instance 화 되며 session이 끝나면 소멸됨.
  • global session
    • 포틀릿 기반의 웹 애플리케이션 용도로 전역 세션 스코프가 빈과 같은 스프링 MVC를 사용한 포탈 애플리케이션 내의 모든 포틀릿 사이에 공유를 할 수 있습니다.
  • thread
    • 새 thread에서 요청하면 새로운 bean instance 생성합니다. 같은 thread의 요청에는 항상 같은 instance 반환 됩니다.
  • custom
    • org.springframework.beans.factory.config.Scope를 구현하고 custom scope를 스프링의 설정에 등록하여 사용.