scope : 빈이 유지 되는 범위
생성 시점: 애플리케이션 실행 시 (컨테이너 초기화 때)
유지 범위: 애플리케이션 전체 동안 하나만 유지
모든 요청, 세션에서 같은 인스턴스를 공유
보통 서비스, 레포지토리 빈을 이렇게 둠
@Service
public class UserService {
// 애플리케이션 내내 같은 객체
}
생성 시점: 매번 요청할 때마다 새로 생성
유지 범위: 컨테이너가 만들어주고, 이후에는 더 이상 관리하지 않음
매번 새로운 인스턴스가 필요할 때 사용 (잘 쓰이지 않음)
@Component
@Scope("prototype")
public class TempBean {
// 매번 getBean() 할 때마다 새로운 객체
}
생성 시점: HTTP 요청이 들어올 때
유지 범위: 요청(Request)이 끝날 때까지
웹 애플리케이션에서만 동작
컨트롤러, 요청 단위 상태 유지할 때 사용
@Component
@Scope("request")
public class RequestBean {
// 요청 하나마다 독립적으로 존재
}
생성 시점: HTTP 세션이 시작될 때
유지 범위: 세션이 유지되는 동안
로그인 같은 사용자별 상태를 저장할 때 사용
@Component
@Scope("session")
public class SessionBean {
// 같은 브라우저 세션 동안 공유됨
}
생성 시점: 애플리케이션 시작 시
유지 범위: 애플리케이션 컨텍스트(ServletContext) 살아있는 동안
사실상 싱글톤과 거의 같지만, 웹 컨텍스트 기준이라 구분됨