IoC,DI란?
Ioc
DI
Spring Di 컨테이너
IoC(제어의 역전)란?
- 제어권이 바뀐다.(사용자가아님 프레임워크가 제어권을가진다.(컨테이너))
- 개발자가 객체직접생성하지않는다.(컨테이너가 생성된다.)
IoC 의존관계를 결정,설정,생명주기를 해결하기위한 디자인패턴
IoC가아닌경우
-사용자가 New로 생성한다.
ex)
IoC이면
-new 생성직접안한다.
ex)
IoC컨테이너(제어권 가지고있음)
-객체 생성 생명주기 관리한다.
-의존성관리.
-POJO의 생성,초기화,서비스,소멸에 대한 권한을 가진다.
IOC분류
DL
DI
DL 의존성 검색(특정 컨테이너에 종속되는API사용)
- 저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lookup하는것이다.
- 컨테이너가 제공하는 API를사용하기때문에 컨테이너에 종속성이 늘어난다.
- EJB
- Spring
DI 의존성 주입(주로 많이사용)
-각 클래스간의 의존관례를 빈설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는것이다.
-spring
-PicoContainer
-SetterInjection(셋터통해 주입)
-Constructor(생성자통해 주입)
-Method(자바메서드통해주입)
DI개념(의존관계주입)
-의존관계 빈설정(사용자가 설정해줌) 어노테이션등등이 있다.
-컨테이너가 정보들을읽고 자동으로 설정해준다.
개발자의 역할
-의존관계 설정해준다. (어노테이션)
ex)
컨테이너가 흐름의 주체가 된다.(사용자가 설정해준것을 컨테이너가 연결한다.)
장점
-코드가 단순해진다.
-컴포넌트 간의 결합도가 제거된다.
ex)컨트롤러에서 서비스호출 New로 하지않는다.
3가지 유형
-SetterInjection (셋터통해 주입)
-Constructor (생성자통해 주입)
-Methodinjection (자바메서드통해주입)
클래스 호출방식
클래스->인터페이스->구현클래스
연결은 호출이 아닌 XML(설정파일)읽어와 의존성을 삽입해준다.
SetterInjection(한번에 한개씩)
beans.xml
Hello.java
Constructor Injection(생성자생성)
beans.xml
Hello.java
Spring DI 컨테이너
- Spring DI컨테이너가 관리하는 객체를 빈(bean)이라고 하고,
이 빈(bean)들을 관리한다는 의미로 컨테이너를 빈 팩토리(BeanFactory)라고 부른다.
- SpringAPI에서 BeanFactory 인터페이스제공한다.
- BeanFactory에 여러가지 컨테이너 기능을 추가하여 애플케이션 컨텍스라고부른다.
BeanFactory
- Bean을 등록,생성 조회,반환 관리한다.
- 보통은 BeanFactory를 바로 사용하지 않고, 이를 확장한 ApplicationContext를 사용한다.
- getBean() 메서드가 정의되어있다.
ApplicationContext <-DI컨테이너 역할을한다.
- Bean을 등록,생성,조회,반환 관리하는 기능은 BeanFactory와 같다.
- Spring의 각종 부가 서비스를 추가로 제공한다.
- Spring이 제공하는 ApplicationContext 구현 클래스가 여러가지 종류가있다.
'개발 소발 > 개발 Spring' 카테고리의 다른 글
Bean등록 및 메타정보구성이란? (0) | 2017.11.21 |
---|---|
bean,properties설정이란? (0) | 2017.11.20 |
Junit,Spring-Test란?(의존성예제) (0) | 2017.11.20 |
STS,maven이란? (0) | 2017.11.20 |
Spring프레임워크란? (0) | 2017.11.20 |