빈을 공유하기 위한 인스턴스를 단 하나만 만듬 -> singleton 스코프
빈이 요청될 때마다 새로운 빈 인스턴스를 생성 -> 프로토타입 스코프
빈의 스코프는 bean 엘리먼트의 scope 속성을 사용해 정의한다. 스코프를 지정하지 않으면 그 빈은 싱글턴 스코프로 지정된다.
웹 애플리케이션에서는 request, session, websocket, application 과 같은 몇 가지 스코프를 사용한다.
싱글턴
싱글턴 스코프는 XML 파일에 정의된 모든 빈의 디폴트 스코프이다.
싱글턴 스코프 빈의 인스턴스는 스프링 컨테이너가 생성될 때 함께 생성되고, 스프링 컨테이너가 파괴될 때 함께 파괴된다.
스프링 컨테이너는 싱글턴 스코프 빈의 인스턴스를 단 하나만 만들고, 그 빈에 의존하는 모든 빈에 유일한 인스턴스를 공유한다.
프로토타입
프로토타입 스코프빈이 싱글턴 스코프 빈과 다른 점은 스프링 컨테이너가 항상 프로토타입 스코프 빈의 새로운 인스턴스를 반환한다는 것이다.
그리고 프로토타입 스코프 빈의 또 다른 특징은 프로토타입 빈이 항상 지연 초기화된다는 것이다.
bean 엘리먼트의 scope 속성값을 prototype 으로 설정한다.
빈에 적합한 스코프 선택
빈이 어떤 대화적 상태도 유지하지 않다면(상태가 없는 stateless빈) -> 싱글턴 스코프 빈으로 정의,
빈의 대화적 상태를 유지해야 한다면 프로토타입 스코프 빈으로 정의해야 한다.