191021
빈
스프링이 IoC 방식으로 관리하는 오브젝트
모든 오브젝트가 빈인건 아니다.
스프링이 관리하는 오브젝트만을 칭함
빈 팩토리
말 그대로 빈을 생성, 등록, 조회 등등의 빈 관리.
바로 사용하지 않고 이를 확장한 어플리케이션 콘텍스트를 사용
어플리케이션 콘텍스트
빈 팩토리를 확장한 IoC 컨테이너.
빈 팩토리라고 부를때는 주로 빈의 생성, 제어의 관점이고
애플리케이션 콘텍스트의 경우 스프링이 제공하는 지원 기능을 모두 포함하여 이야기하는 것.
빈팩토리를 상속함.
설정 정보 (configuration metadata)
스프링의 설정정보란 애플리케이션 컨텍스트 또는 빈팩토리가 IoC를 적용하기 위해 사용하는 메타 정보.
형상정보, 청사진.
컨테이너 (IoC 컨테이너)
컨테이너라는 말 자체가 IoC 개념을 담고 있음.
스프링 = 컨테이너 = IoC 컨테이너
----
스프링은 왜 싱글톤으로 빈을 만들까.
주로 적용 대상이 자바 엔터프라이즈 기술을 사용하는 서버 환경이기 때문.
매번 클라이언트 요청마다 오브젝트를 새로 만들면 서버 부하가 심하다.
싱글톤 레지스트리
스프링은 직접 싱글톤 형태의 오브젝트를 만들고 관리하는 기능을 제공한다. 이게 바로 싱글톤 레지스트리.
스프링 컨테이너는 싱글톤 관리 컨테이너 이기도 함.
기본적으로 싱글톤이 멀티스레드 환경에서 사용되는 경우 무상태 방식으로 만들어져야 한다.
인스턴스 변수를 변경하고 유지하는 방식으로 만들지 않는다.
읽기전용은 상관없다.
요청 정보나 리소스로부터 생성한 정보는 어떻게?
파라미터, 로컬변수, 리턴 ㄱ밧을 이용한다.
메소드 파라미터나 메소드 안에서 생성되는 로컬 변수는 매번 독립적인 공간이 만들어져 싱글톤이어도 스레드 세이프 하다.
----
의존관계
A ---> B
A가 B에 의존한다.
B의 변경이 A에 영향을 미친다.
의존관계는 방향성이 있다.
UserDao --(사용)-> (interface) ConnectionMaker <--(구현)-- DConnectionMaker
DConnectionMaker의 변경은 UserDao에 영향을 주지 않는다.
인터페이스에 대해서만 의존관계를 만들어두면 구현클래스와의 관계가 느슨해지고 변화에 영향을 덜 받는다.
결합도가 낮다.