스프링 의존성 주입 (Dependency Injection)
28 Mar 2021의존성 주입 (Dependency Injection)
IoC 컨테이너가 BeanDefinition(xml, annotation 으로 명시된)정보를 바탕으로
클래스간 ‘의존관계를 자동으로 연결(=주입)’ 하는 것.
- 객체 레퍼런스를 IoC 컨테이너로 부터 주입 받아서, 실행 시에 ‘동적으로 의존관계’ 가 생성.
- 코드가 단순해지고, 컴포넌트간 결합도가 낮아짐.
여기서 의존 관계란 ? [ 스프링 의존 관계 (Dependency) ]
주입 유형
- 메서드를 통한 주입
- 의존성을 입력 받는 일반 메서드를 통해 의존성을 주입 받음.
- setter를 통한 주입
- 의존성을 입력 받는
setter
메서드를 통해 의존성을 주입 받음.
- 의존성을 입력 받는
- 생성자를 통한 주입
- 의존성을 포함하는 클래스 생성자를 통해 의존성을 주입 받음.
Bean Factory
Spring DI 컨테이너가 관리하는 객체를 빈(Bean)이라 하며, 이 빈을 관리한다는 의미로 해당 컨테이너를 빈 팩토리(Bean Factory)라 부른다.
- 객체의 생성, 객체 사이의 런타임 관계를 DI 관점에서 볼 때는 컨테이너를
Bean Factory
라 한다. Bean Factory
에 여러 컨테이너 기능을 추가하여ApplicationContext
라고 부른다.- Bean Factory
- 빈 등록, 생성, 조회, 반환을 관리
getBean()
메서드 정의되어 있음- 보통 확장된
ApplicationContext
으로 사용
- ApplicationContext
- 빈 팩토리 기능을 이어받아 사용
- 스프링이 제공하는
ApplicationContext
구현 클래스가 여러가지 있음 - StaticApplicationContext, GenericXmlApplicationContext, WebApplicationContext 등…
- Bean Factory
애플리케이션 컨텍스트는 BeanDefinition으로 만들어진 메타정보를 담은 오브젝트를 사용해 IoC와 DI 작업을 수행한다.

그림 1
BeanDefinition 인터페이스 정의
IoC 컨테이너가 사용하는 빈 메타정보는 대략 다음과 같다.
- 빈아이디, 이름, 별칭 : 빈오브젝트를 구분 할 수 있는 식별자
- 클래스 또는 클래스 이름 : 빈으로 만들 POJO 클래스 또는 서비스 클래스 정보
- 스코프 : 싱글톤, 프로토타입과 같은 빈의 생성 방식과 존재 범위
- 프로퍼티 값 또는 참조 : DI에 사용할 프로퍼티 이름과 값 또는 참조하는 빈의 이름
- 생성자 파라미터 값 또는 참조 : DI에 사용할 생성자 파라미터 이름과 값 또는 참조할 빈의 이름
- 지연된 로딩 여부, 우선 빈 여부, 자동와이어링 여부, 부모 빈 정보, 빈팩토리 이름 등
빈은 오브젝트 단위로 등록되고 만들어지기 때문에 같은 클래스 타입이더라도 하나 이상의 빈으로 등록할 수 있다.