IoC(Inversion Of Controll)
- 개발자가 직접 오브젝트 생성하고 관리하는 것이 아니라 스프링 프레임워크에서 관리 대상을 생성하고 관계를 맺어 줍니다.
- ApplicationContext 에서 작동 (스프링컨테이너 / IoC 컨테이너)
- IoC 컨테이너는 객체를 생성하고, 의존관계를 설정하고 생명주기를 관리합니다.
- 구현 관계 : BeanFactory ← ApplicationContext ← WebAppliactionContext
IoC 용어 정리
bean
: 스프링에서 제어권을 가지고 직접 만들어 관계를 부여하는 오브젝트
- 스프링을 사용하는 애플리케이션에서 만들어지는 모든 오브젝트가 빈은 아닙니다.
- 스프링의 빈은 스프링 컨테이너가 생성하고 관계설정, 사용을 제어해주는 오브젝트를 말합니다.
bean factory
: 스프링의 IoC를 담당하는 핵심 컨테이너
- Bean을 등록/생성/조회/반환/관리 한다. 보통 bean factory 를 바로 사용하지 않고 이를 확장한 application context 를 이용합니다.
- BeanFactory는 bean factory가 구현하는 interface 입니다. (getBean() 등의 메서드가 정의)
application context
: bean factory를 확장한 IoC 컨테이너
Bean의 등록/생성/조회/반환/관리 기능은 bean factory와 같지만, 추가적으로 spring의 각종 부가 서비스를 제공 합니다.
- ApplicationContext 는 application context 가 구현해야 하는 interface이며, BeanFactory를 상속합니다.
configuration metadata
: application context 혹은 bean factory가 IoC를 적용하기 위해 사용하는 메타정보
- 스프링의 설정정보는 컨테이너에 어떤 기능을 세팅하거나 조정하는 경우에도 사용하지만 주로 bean을 생성/구성하는 용도로 사용합니다.
container (ioC container)
: IoC 방식으로 bean을 관리한다는 의미에서 bean factory나 application context를 가리킵니다.
- application context는 그 자체로 ApplicationContext 인터페이스를 구현한 오브젝트를 말하기도 하는데, 하나의 애플리케이션에 보통 여러개의 ApplicationContext 객체가 만들어집니다.
- 이를 통칭해서 spring container라고 부를 수 있습니다.
DI(Dependency Injection)