본문 바로가기
Spring

IOC(DI)컨테이너

by chief_sac 2021. 5. 29.
반응형

 

IOC(DI) 컨테이너

https://docs.spring.io/spring-framework/docs/4.3.x/spring-framework-reference/htmlsingle/

(Spring)

or https://www.egovframe.go.kr/wiki/doku.php(전자정부)

 

 

IoC(Inversion of Control)

💡
스프링에서 어떤 객체를 어느시점에 생성하고 사용할지는 컨테이너가 제어하는데 실행 흐름이나 객체의 생명 주기를 개발자가 하는게 아니라 컨테이너로 제어권이 넘어가는것을 IoC라고 한다.
  • 실행적인 측면
    • 개발자가 객체의 생성과 제거를 제어
    • 현재 대부분의 애플리케이션은 EJB container, Web container 등의 컨테이너 기반 하에서(생성과 제거) 동작한다
  • 객체간의 관계적인 측면
    • 애플리케이션은 여러 비지니스 로직을 수행하기 위해 둘 이상의 객체를 이용한다. 즉 각 객체는 서로 의존적으로 참조를 하여 로직을 처리하면서 높은 결합력을 가지게된다.
    • IoC는 객체가 필요하는 객체를 내부가아닌 외부에서 주입(Inject)를 받아서 사용하는 것이다

 

 

DI(Dependency Injection)

💡
객체의 생성 소멸 등등 제어를 컨테이너가 관리하고 모듈간의 의존성을 모듈의 외부 (컨테이너)에서 주입 시켜주는 기능으로 Inversion of Control의 한 종류이다 런타임시 사용하게될 의존 대상과 관계를 총체적으로 Spring이 결정하고 결정된 의존 특징을 런타임시 부여한다.

 

 

 

Spring Bean Container 사용단계 : bean의 lifecycle 관리자

  1. Spring container module을 빌드 패스에 추가 (beans, core, context, spEL)
  1. bean metadata(spring설정파일)(bean definition metadata) 등록 파일
    1. bean 등록(bean 엘리먼트)
    1. 등록된 bean 들간의 의존관계 형성(Defendency injection, 의존성주입)
      • constructor injection (필수전략 주입) constructior-arg, c namespace(3.1ver부터)
      • setter injection (optional 전략 주입) property, p namespace(3.0ver부터)
  1. Container 객체 생성
    • Application Context의 구현체
  1. getBean으로 의존 객체 주입
    • type 을 기준으로 한 주입(단점: 두개 이상의 bean이 존재시 exception발생)
    • id를 기준으로 한 주입(단점: 캐스팅하기 귀찮다)
  1. 컨테이너 종료(shutdownHook 등록 : 남아있는 스레드 확인중에 데몬스레드만 남으면 close해준다)

 

 

컨테이너의 빈관리 정책

기본적으로 컨테이너는 싱글톤패턴으로 주입되지만 타입(class)이아니라 bean이 대상이다(우리가 아는 싱글톤패턴과 다름)

 

  1. 특별한 설정이 없는 한 bean은 singleton으로 관리됨(싱글턴의 대상은 bean) scope => singleton(기본정책) : 하나의 bean은 하나의 객체 prototype : 객체가 주입될때마다 새로운 객체가 생성됨. request / session (request스코프와 bean의 생명주기가 같다)/(session스코프와 bean의 생명주기가같다)
  1. 특별한 설정(lazy-init)이 없는 한 컨테이너가 초기화 될때 등록된 bean의 모든 객체 생성.(객체생성시점) : 객체의 생성 시점을 지연시키거나 생성 순서를 어느정도 제어하 수 있음
  1. depends-on을 이용하여 bean들간의 순서를 직접 제어도 가능함.
  1. 생명 주기 콜백 정의 가능 *** init - method는 필요한 injection(주입이 모두 끝난 후에 호출됨)

 

 

 

 

 

 

반응형

'Spring' 카테고리의 다른 글

VO와 DTO란(VO vs DTO 차이)  (0) 2021.07.25
Reactive Stream 리액티브 스트림이란.  (0) 2021.07.10
Batch Job(일괄처리프로그램)  (0) 2021.07.01
Spring Websocket  (0) 2021.05.29
Spring에서 모듈(컨테이너)  (0) 2021.04.24