DI의 개념
각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보 바탕으로 컨테이너가 자동으로 연결해주는 것을 말한다.
-개발자들은 단지 빈 설정파일에서 의존관계가 필요하다는 정보를 추가하면 된다.
- 객체 레퍼런스를 컨테이너로부터 주입 받아서, 실행 시에 동적으로 의존관계가 생성된다.
- 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해 주는 것이다.
DI의 장점
-코드가 단순해진다.
-컴포넌트 간의 결합도가 제거된다.
- Hello 클래스는 직접적으로 StringPrinter와 ConsolePrinter을 호출하지 않는다.
- 설정 파일(bean.xml)에 어떤상황에 String,Console을 Hello에게 주입할지 적어준다.
bean.xml 주입 방법 (Setter, 생성자)
1. Setter Injection 방법
1)bean.xml 설정 파일에 hello라는 클래스에 있는 setName과 setPrinter을 설정해준다.
bean.xml
<bean id="hello" class="bean.Hello">
<property name="name" value
</bean>
Hello.java
public void setName(String name) {
this.name = name;
}
public void setPrinter(Printer printer) {
this.printer = printer;
}
2. Constructor Injection 방법
1) 클래스에 생성자를 선언을 하고
Hello.java
public Hello(String name, Printer printer) {
this.name = name;
this.printer = printer;
}
2) beans.xml 설정파일에서 constructor-arg index=“0” value=“Spring”을 이용해 넣어준다.
bean.xml
<bean id="hello" class="bean.Hello">
<constructor-arg index="0" value="Spring" />
<constructor-arg index="1" value="printer" />
</bean>
Spring DI 컨테이너의 개념
spring DI 컨테이너가 관리하는 객체를 빈(bean)이라고 하고, 이 빈(bean)들을 관리한다는 의미로 컨테이너를 빈 팩토리(BeanFactory)라고 부른다.
BeanFactory와 ApplicationContext
BeanFactory |
-Bean을 등록, 생성, 조회, 반환 관리함 - 보통은 BeanFactory를 바로 사용하지 않고, 이를 확장한 Application Context를 사용함. - getBean() 메서드가 정의되어있음
|
Application Context |
- Bean을 등록, 생성, 조회, 반환 관리하는 기능은 BeanFactory와 같음 - Spring의 각종 부가 서비스를 추가로 제공함 - Spring이 제공하는 ApplicationContext구현 클래스가 여러 가지 종류가 잇음
|
'2019백업' 카테고리의 다른 글
namespace는 무엇이고 XML은 무엇일까? (0) | 2019.06.20 |
---|---|
4-1) DI 예시 코드 (0) | 2019.06.20 |
3. Spring Framework 개요 (0) | 2019.06.20 |
2. 프레임워크의 구성요소와 종류 (0) | 2019.06.20 |
1. 디자인 패턴과 프레임워크 (0) | 2019.06.20 |