Spring Container(스프링 컨테이너)란 스프링에서 자바 객체들을 관리하는 공간을 말한다. Spring Container에서는 Bean의 생성부터 소멸까지를 개발자 대신 관리해주는 곳이라고 할 수 있다.
이름 | 설명 |
---|---|
Ioc(Inversion of Control) | 개발자는 New 연산자, 인터페이스 호출, 팩토리 호출방식으로 객체를 생성하고 소멸시킨다. IoC란 인스턴스의 생성부터 소멸까지의 객체 생명주기 관리를 개발자가 하는 대신 스프링(컨테이너)가 관리하는 것을 말한다. |
DI(Dependency Injection) | IoC를 실제로 구현하는 방법으로서 의존성있는 컴포넌트들 간의 관계를 개발자가 직접 코드로 명시하지 않고 컨테이너인 Spring이 런타임에 찾아서 연결해주게 하는 것 |
크게 우선 BeanFactory
와 ApplicationContext
두 종류로 나눌 수 있다.
BeanFactory는 Bean을 등록하고 생성하고 조회하고 돌려주는 등 Bean을 관리하는 역할을 한다.
getBean()
메소드를 통해 Bean을 인스턴스화 할 수 있다.
getBean()
이 호출되면 팩토리는 의존성 주입을 통해 Bean을 인스턴스화하고, 빈의 특성을 설정하기 시작한다. (여기서 Bean의 일생이 시작)ApplicationContext 컨테이너가 BeanFactory의 기능을 포괄하면서 추가적인 기능을 제공하기 때문에 ApplicationContext를 대부분 사용한다.
- BeanFactory : 처음으로 getBean()이 호출된 시점에서야 해당 Bean을 생성(lazy loading)
- ApplicationContext : 컨텍스트 초기화 시점에 모든 Singleton Bean을 미리 로드한 후 애플리케이션 기동 후에는 Bean을 지연 없이 얻을 수 있다. (미리 Bean을 생성해 놓아 Bean이 필요할 때 즉시 사용할 수 있도록 보장)