[스프링 프레임워크/Spring Framework] Dependency Injection(DI) 04

2013. 3. 15. 09:44Information Technology/Spring

□ Spring Framework 특징

5. Plan Old Java Object[POJO] 지원 : 특정라이브러리에 전혀 (상속)받지 않은 Object, 즉 어떤 환경에서든 사용할 수 있다. 재사용성이 극대화 된다. (ex-User 인터페이스), 단위 테스트 용이

6. 트랜잭션 처리를 위한 일관된 방법 제공 : 트랜잭션 매니저를 통해 , 트랜잭션을 설정만 하면 트랜잭션이 관리 되는 코드를 내부적으로 관리한다.

- 트랜잭션 관리는 서비스 계층이 해야 한다. And 서비스 계층은

 

Dependency Injection(DI)

※ Factory : 객체를 생성해 내는 역할을 함

※ bean : 스프링 컨테이너의 의해서 관리 되는 객체를 말함

 

□ 컨테이너의 유형 3가지

1 BeanFacory ( A )

↓ 상속

2 ApplicationContext (A B)

↓ 상속

3 WebApplicaionContext ( A B C )

 

 

□ Dependency Injection[DI]

○ 의존성 주입

○ Spring Framework가 지원하는 핵심 기능

○ 객체 사이의 의존 관계가 객체 자신이 아닌 외부(조립기)에 의해 설정됨

○ 컨테이너의 역할

• A 객체가 필요로 하는 의존 관계에 있는

Dependency Injection(DI)

□ DI – 의존 관계 이해하기

 

□ DI(Dependency Injection) 이란?

 

□ DI – Spring Bean과 IoC 컨테이너

○ String 빈(bean)이란?

• Spring이 제어권을 가지고 생성 및 객체간의 관계를 관리하는 객체 의미

○ IoC컨테이너 or Spring 컨테이너?

• Spring 빈의 생성과 관계 설정, 사용, 생명주기 관리 등을 관장하는 기능을 제공해주며 Spring의 주요 핵심 기능이므로 컨테이너라고도 함

 

□ 의존 객체간의 관계도를 적용하는 개발 방법

○ 직접 의존하는 객체를 코드에 명시하는 방법

• 단위 테스트가 어려움

• 의존 객체 변경 시 코드 수정이 불가피

○ Factory나 JNDI를 이용하여 검색하는 방법

• 단위 테스트가 어려움

• 실제 의존 객체와의 느슨한 의존성 대신 Factory나 JNDI와의 의존성 형성

○ 외부의 조립기(Assembler)를 이용하는 방법

• 단위 테스트 용이

• 느슨한 의존성

 

□ Spring의 Dependency Injection 방법

○ 객체간의 의존성을 설정 파일로 simple하게 설정 및 관리

□ Constructor Injection (예제)

○ 의존하는 빈 객체를 컨테이너로부터 생성자의 파라미터를 통해서 전달받는 방식

○ 클래스를 초기화 할 때 컨테이너로부터 의존 관계에 있는 특정 리소스인 빈 객체를 생성자를 통해서 할당 받는 방법

• 설정 파일에 <constructor-arg> 태그를 이용

• 방법1 – index로 지정하는 방법

- index는 0부터 시작

• 방법2- 타입으로 지정하는 방법

 

○ Constructor Injection (예제)

1. 생성자를 이용한 방법

- 참고 : com.asianaidt.sample1.constructor

2. setter를 이용한 방법

- 참고 : com.asianaidt.sample2.setter

 

□ Setter Injection

○ setXxx() 형태의 설정 메소드를 통해서 전달받는 방법으로 프로퍼티 설정 방식

○ 의존하는 객체를 전달 받을 setter 메소드를 작성

○ 설정파일에 <property> 태그를 이용

• 객체인 경우 < ref> 태그 이용

 

□ 컬렉션 타입의 프로퍼티 설정

 

□ List 타입의 프로퍼티 설정

○ List 타입예제

- 참고 : com.asianaidt.sample1.collection

 

※ value type은 제네릭을 쓰면 사용할 필요가 없다

※ set은 순서나 인덱스를 관리하지 않기 떄문에 중복된 값을 가질수 없다.


[ Hierarchy ] 


src.zip


 

Dependency Injection(DI)

1 2 3 4 5 6 7