IoC 컨테이너 또는 DI 컨테이너라고 불린다. 개발자를 대신해서 객체를 생성하고 관리하며 각 객체간 의존 관계를 연결해주는 역할을 한다.
ApplicationContext
를 스프링 컨테이너라고 한다. ApplicationContext
는 인터페이스이다.
@Configuration
: 설정 정보를 관리하는 객체 생성@Bean
: 기본적으로 사용하는 것 이외에 스프링 빈 객체로 생성하고 싶은 객체를 생성스프링 컨테이너는 @Configuration
이 붙은 클래스를 설정 정보로 사용한다. @Configuration
객체를 모두 읽어오고 해당 객체 내부에 있는 @Bean
어노테이션이 붙은 메서드 내의 객체들을 스프링 빈 객체로 생성하여 관리한다.
스프링 컨테이너의 종류로는 BeanFactory 와 ApplicationContext 가 있다.
스프링 컨테이너의 최상위 인터페이스이다. 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean()
메소드를 이용하여 스프링 빈 객체를 호출하는 시점에 빈을 생성한다.
BeanFactory 의 기능을 모두 상속받아 제공한다. 빈을 관리하고 검색하는 기능을 BeanFactory 가 제공해주지만 ApplicationContext 는 이외의 부가 기능도 제공한다. getBean()
메소드를 호출하기 전에 초기화 시점에 모든 싱글톤 빈을 미리 로드하기 때문에 빈을 지연없이 받을 수 있다.
MessageSource
: 메시지 소스를 활용한 국제화 기능 (한국어, 영어 등)EnvironmentCapable
: 환경 변수 (로컬, 개발, 운영 등을 구분해서 처리)ApplicationEventPublisher
: 이벤트를 발행하고 구독하는 모델을 편리하게 지원ResourceLoader
: 파일, 클래스 패스, 외부 등의 리소스를 편리하게 조회BeanFactory 를 직접 사용하는 일은 거의 없으며 주로 ApplicationContext 를 사용한다.