# DI(Dependency Injection)
- 기존의 의존관계
Foo f = new Foo();
Bar b = new Bar(f);
>> 의존 객체 변경 시 코드 수정이 불가피하다.
(1) Spring에서 의존관계
- 객체간의 의존성을 설정 파일(xml)로 손쉽게 관리한다.
- 두 가지 방법 존재
1. Constructor-based Injection
- 의존하는 객체(위 예시에서는 Foo객체)를 생성자를 통해서 전달 받는다.
- <contructor-arg> 태그 이용
* 객체인 경우 <ref> 태그
* 문자열이나 기본 데이터 타입이라면 <value> 태그
>> applicationContext.xml의 내용을 java로 표현하자면
import x.y.Bar;
import x.y.Baz;
Bar = new Bar();
Baz = new Baz();
Foo foo = new Foo(bar, baz);
>> 이런식으로 표현할 수 있다.
- 또한 index 속성으로 순서를 정해줄 수도 있다.
>> 위 그림에서 applicationContext.xml을 java로 표현하자면
import myspring.sample2.constructor.GreetingServiceImpl;
GreetingServiceImpl greeting1 = new GreetingServiceImpl("안녕", 3);
>> 이런식으로 표현할 수 있다.
2. Setter-based Injection
- setXxx() 형태의 설정 메서드를 통해서 전달받는 방법으로 프로퍼티 설정 방식
* 의존하는 객체를 전달받을 setter 메서드를 작성한다.
* 설정파일에 <property> 태그를 이용
: 객체인 경우 <ref> 태그
: 문자열이나 기본데이터 타입이라면 <value> 태그
- 생성자 오버로딩 시 기본 생성자가 반드시 필요하다.
3. Look-up 메서드 인젝션
- 접근제한자는 public 또는 protected
- 리턴타임이 void가 아니다.
- 인자를 갖지 않음
- 추상메서드도 가능
- final이 되면 안됨
4. 임의 빈 객체 사용
>> java로 표현한다면
Foo foo = new Foo();
foo.setEmail("heojk@daum.net");
foo.setBar(new Bar());
5. 컬렉션 타입의 프로퍼티 설정
>> java로 바꾼다면
Bar bar = new Bar();
Bar bar2 = new Bar();
Foo foo = new Foo();
Map<String, Bar> map = new HashMap<String, Bar>();
map.put("hello", bar);
map.put("hi", bar2);
foo.setGreetingMap(map):
>> java로 바꾼다면
Properties properties = new Properties();
properties.setProperty("server", "192.168.1.100");
properties.setProperty("timeout", "5000");
Foo foo = new Foo();
foo.setConfig(properties);
'Spring Framwork' 카테고리의 다른 글
비트캠프 - 2020.03.16 Spring Framework (5) - DI(의존성 주입) (4) | 2020.03.16 |
---|---|
비트캠프 - 2020.03.11 Spring Framework (3) : 어노테이션 및 문법 (0) | 2020.03.11 |
비트캠프 - 2020/03/11 Spring Framework (2) : xml (0) | 2020.03.11 |
비트캠프 - 2020/03/10 Spring Framework (1) : 시작하기 (1) | 2020.03.10 |