IoC 란?
Inversion of Control : 의존 관계 주입( Dependency Injection) 이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법을 말함
스프링 IoC 컨테이너
- BeanFactory
- 애플리케이션 컴포넌트의 중앙 저장소
- 빈 설정 소스로 부터 빈 정의를 읽어들이고, 빈을 구성하고 제공한다.
컨테이너가 관리하는 객체를 빈(bean)이라고 하고, 이 빈(bean)들을 관리한다는 의미로 컨테이너를
빈 팩토리(BeanFactory) 라고 부른다.
BeanFactory에 여러 가지 컨테이너 기능을 추가하여 애플리케이션 컨텍스(ApplicationContext)라고 부름
OwnerController 가 IoC 컨테이너 내부에 들어오고, 컨테이너에서 OwnerController 객체를 만들어 준다.
그리고, OwnerRepository 의 객체도 만들어 준다. -> Bean
즉, Bean들의 의존성들을 자동으로 관리해준다.
IoC 컨테이너는 Bean들의 의존성을 엮어주며 주입을 자동적으로 해주는 역할을 한다.
IoC 컨테이너 : OwnerController가 Bean으로 등록이 되고 (@Controller라는 어노테이션이 붙어있기 때문에), IoC 컨테이너 내부에 들어가서 그 객체들을 만들고, 그 객체들의 의존성을 엮어준다. OwnerRepository 라는 Bean을 찾아서 생성자에다가 의존성을 주입시켜주는 일을 한다.
빈
- 스프링 IoC 컨테이너가 관리하는 객체
- 장점
- 의존성 관리
- 스코프
- 싱글톤(기본값) : 하나의 객체
- 프로토타입 : 매번 다른 객체
- 라이프사이클 인터페이스
ApplicationContext
- BeanFactory
- 메시지 소스 처리 기능
- 이벤트 발행 기능
- 리소스 로딩 기능
- ....
ApplcationContext : 얘가 Bean들을 만들고, 그 Bean들의 의존성을 엮어준다. 오로지 Bean들만 관리!