반응형
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)
실행적인 측면
- 개발자가 객체의 생성과 제거를 제어
- 현재 대부분의 애플리케이션은 EJB container, Web container 등의 컨테이너 기반 하에서(생성과 제거) 동작한다
객체간의 관계적인 측면
- 애플리케이션은 여러 비지니스 로직을 수행하기 위해 둘 이상의 객체를 이용한다. 즉 각 객체는 서로 의존적으로 참조를 하여 로직을 처리하면서 높은 결합력을 가지게된다.
- IoC는 객체가 필요하는 객체를 내부가아닌 외부에서 주입(Inject)를 받아서 사용하는 것이다
DI(Dependency Injection)
Spring Bean Container 사용단계 : bean의 lifecycle 관리자
- Spring container module을 빌드 패스에 추가 (beans, core, context, spEL)
- bean metadata(spring설정파일)(bean definition metadata) 등록 파일
- bean 등록(bean 엘리먼트)
- 등록된 bean 들간의 의존관계 형성(Defendency injection, 의존성주입)
- constructor injection (필수전략 주입) constructior-arg, c namespace(3.1ver부터)
- setter injection (optional 전략 주입) property, p namespace(3.0ver부터)
- Container 객체 생성
- Application Context의 구현체
- getBean으로 의존 객체 주입
- type 을 기준으로 한 주입(단점: 두개 이상의 bean이 존재시 exception발생)
- id를 기준으로 한 주입(단점: 캐스팅하기 귀찮다)
- 컨테이너 종료(shutdownHook 등록 : 남아있는 스레드 확인중에 데몬스레드만 남으면 close해준다)
컨테이너의 빈관리 정책
기본적으로 컨테이너는 싱글톤패턴으로 주입되지만 타입(class)이아니라 bean이 대상이다(우리가 아는 싱글톤패턴과 다름)
- 특별한 설정이 없는 한 bean은 singleton으로 관리됨(싱글턴의 대상은 bean) scope => singleton(기본정책) : 하나의 bean은 하나의 객체 prototype : 객체가 주입될때마다 새로운 객체가 생성됨. request / session (request스코프와 bean의 생명주기가 같다)/(session스코프와 bean의 생명주기가같다)
- 특별한 설정(lazy-init)이 없는 한 컨테이너가 초기화 될때 등록된 bean의 모든 객체 생성.(객체생성시점) : 객체의 생성 시점을 지연시키거나 생성 순서를 어느정도 제어하 수 있음
- depends-on을 이용하여 bean들간의 순서를 직접 제어도 가능함.
- 생명 주기 콜백 정의 가능 *** 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 |