스프링 프레임워크의 핵심 컴포넌트로 내부에 존재하는 빈들의 생명주기를 관리한다.
관리를 위해 IoC사용
BeanFactory, ApplicationContext 두 개의 컨테이너로 DI가 이루어진 빈들을 제어하고 관리
Bean의 생성, 관리, 제거 등의 역할을 담당
스프링 컨테이너는 XML, 애너테이션 기반의 자바 설정 클래스
로 생성
빈의 인스턴스화, 구성, 전체 생명 주기 및 제거까지 처리
원하는 만큼 많은 객체를 가짐
의존성 주입을 통해 애플리케이션의 컴포넌트를 관리
기존의 방식으론 새 정책이 생기게 될 경우 변경 사항의 수정이 수작업으로 진행됐다. 서로 의존이 많지 않다면 일일이 수정하겠지만, 서비스 코드가 거대해질 수록 수정이 어려워진다.
하지만 스프링 컨테이너를 사용하면서 구현 클래스에 있는 의존을 제거하고 인터페이스에만 의존하도록 설계할 수 있다.
Configuration MetaData를 사용
파라미터로 넘어온 설정 클래스 정보를 사용하여 스프링 빈을 등록
new AnnotaionConfigApplicationContext(구현 정보.class)
로 스프링에 있는 @Bean
의 메서드에 등록
애너테이션 기반 컨테이너 구성
XML 기반의 ClassPathXmlApplicationContext
도 존재
ApplicationContext 인터페이스의 구현체를 이용한 구현
DependencyConfig.class 등의 구성 정보를 지 정해줘서 스프링 컨테이너를 생성
DependencyConfig에 있는 구성 정보를 통해서 스프링 컨테이너는 필요한 객체들을 생성
애플리케이션 클래스는 구성 메타 데이터와 결합되어 ApplicationContext 생성 및 초기화된 후 완전히 구성되고 실행 가능한 시스템 또는 애플리케이션을 구성
스프링 빈 조회에서 상속관계가 있을 시 부모타입으로 조회하면 자식 타입도 함께 조회
스프링 컨테이너의 최상위 인터페이스
빈을 등록하고 생성하고 조회하고 돌려주는 등 빈을 관리하는 역할
getBean()
메서드를 통해 빈을 인스턴스화
@Bean
이 붙은 메서드의 명을 스프링 빈의 이름으로 사용해 빈 등록
BeanFactory의 기능을 상속받아 제공
빈을 관리하고 검색하는 기능을 BeanFactory가 제공하고 그 외에 부가기능을 제공
부가 기능
MessageSource: 메세지 다국화를 위한 인터페이스
EnvironmentCapable: 개발, 운영 등 환경변수 등으로 나눠 처리하고, 애플리케이션 구동 시 필요한 정보들을 관리하기 위한 인터페이스
ApplicationEventPublisher: 이벤트 관련 기능을 제공하는 인터페이스
ResourceLoader: 파일, 클래스 패스, 외부 등 리소스를 편리하게 조회