DI (Dependency Injection)
Dependency Injection
- 객체 간의 의존관계를 자신이 아닌 외부의 조립기가 수행
- 제어의 역행(IoC)이라는 의미로 사용
- DI를 통해 시스템에 있는 각 객체를 조정하는 외부 개체가 객체들에세 생성시에 의존관계를 주어짐
- 느슨한 결합의 주요강점
- 객체는 인터페이스에 의한 의존 관계만을 알고 있으며, 이 의존 관계는 구현 클래스에 대한 차이를 모르는 채 서로 다른 구현으로 대체가 가능.
스프링의 DI지원
- Spring Container가 DI 조립기를 제공
- 스프링 설정 파일을 통하여 객체 간의 의존관계를 설정
- Spring Container가 제공하는 API를 이용해 객체를 사용
빈 생성범위
-
싱글톤 빈
- 스프링 빈은 기본적으로 singleton으로 만들어짐
- 그러므로 컨테이너가 제공하는 모든 빈의 인스턴스는 항상 동일
- 항상 새로움 인스턴스를 반환하게 하고 싶으면 scope를 prototype으로 설정
빈의 생성 범위 지정
스프링 빈 설정
- 스프링 빈 설정 메타정보
스프링 빈 설정 : XML
-
XML 문서
- XML 문서 형태로 빈의 성정 메타 정보를 기술
- 단순하며 사용하기 쉬움
<bean>
태그를 통해 세밀한 제어 가능
스프링 빈 설정 : Annotation
- Annotation
- 어플리케이션의 규모가 커지고 빈의 개수가 많아질 경우 XML 파일을 관리하는 것이 번거로움
- 빈으로 사용될 클래스에 특별한 annotation (
@autowired
)을 부여해 주면 자동으로 빈 등록 가능.
- "오브젝트 빈 스캐너"로 "빈 스캐닝"을 통해 자동 등록
- 빈 스캐너는 기본적으로 클래스 이름을 빈의 아이디로 사용(클래스 이름의 첫 글자만 소문자로 바꾼 것)
- Annotation으로 빈을 설정할 경우 반드시 component-scan을 설정해야 한다.
스프링 빈 설정 : Java Configuration File
- Annotation 기반 :
@Configuration
적용