오브젝트 팩토리와 애플리케이션 컨텍스트의 차이점.
1. DaoFactroy의 userDao() 메소드를 두 번 호출해서 리턴되는 오브젝트는 다른 오브젝트이다.
// 동일성은 == 연산자로, 동등성은 equals() 메소드로 //
애플리케이션 컨텍스트에 DaoFactroy를 설정정보로 등록하고 getBean() 을 이용해 userDao라는 이름으로 등록된 오브젝트를 여러번 가져와도 동일한 오브젝트임을 알 수 잇다.
: 자바의 기본적인 싱글톤 패턴의 구현 방식의 단점을 보완한 스프링의 싱글톤 형태의 오브젝트
스프링 컨테이너는 싱글톤을 생성하고, 관리, 공급하는 싱글톤 관리 컨테이너이기도 하다.
싱글톤 레지스트리 는 스태틱 메소드와 private 를 사용하는 비정상적 클래스가 아니다.
싱글톤이 멀티스레드 환경에서 서비스 형태의 오브젝트로 상용되는 경우에는 상태정보를 냐부에 갖고 있지 않은 무상태 방식으로 만들어져야한다.
상태가 없는 방식으로 클래스를 만드는 경우 요청에 대한 정보나 DB나 서버의 리소스로부터 생성한 정보는 어떻게 다룰까 ?
-> 파라미터와 로컬변수, 리턴값으로 이용하면 된다.
스프링 빈의 기본 스코프는 싱글톤이다.
싱글톤 스코프는 컨테이너 내에 한 개의 오브젝트만 만들어져서, 강제로 제거하지 않는 한 스프링 컨테이너가 존재하는 동안 계속 유지된다.
싱글톤 스코프 외에 프로토타입 스코프가 잇다. 프로토타입는 컨테이너에게 빈을 요철할때마다 새로운 오브젝트를 만들어준다.
또 웹을 통해 HTTP 요청이 생길 때마다 생성되는 요청 스코프
웹의 세션과 스코프가 유사한 세션 스코프 등이 있다.