스프링 컨테이너는 객체를 관리하는 공간으로 볼 수 있다. 주로 객체를 생성하고, 객체간 필요한 의존관계를 주입해주며, 생명주기를 관리한다. 따라서 스프링 컨테이너는 IoC, DI 컨테이너이다.
프레임워크 vs 라이브러리
스프링 컨테이너는 설정정보를 받아 생성한다. 설정정보로는 자바 코드, XML 등으로 구현할 수 있다. 여기서는 자주 사용하는 자바 코드에 대해 설명할 것이다. 자바 코드는 애노테이션 기반으로 간단하게 구현할 수 있다.
스프링 컨테이너 생성 과정은 다음과 같다
1. 스프링 컨테이너 생성
2. 스프링 빈 등록
3. 의존 관계 주입
1. 스프링 컨테이너 생성

import org.springframework.context.annotation.AnnotationConfigApplicationContext;new AnnotationConfigApplicationContext 객체 생성ApplicationContext의 구현체ApplicationContext applicationContext
= AnnotationConfigApplicationContext(AppConfig.class);
2. 스프링 빈 등록

스프링 빈 등록은 두 가지 방법이 있다.(위 그림에서 수동 빈 등록 이용)
1) 수동 빈 등록 - @Configuration과 @Bean 이용
2) 자동 빈 등록 - @ComponentScan과 @Component 이용
스프링 빈 등록하면 스프링 컨테이너 안에 저장된다.
스프링 빈 저장
3. 의존관계 주입

스프링 빈 등록에 따라 의존관계 주입도 수동/자동으로 나뉜다.
1) 수동 빈 등록 - 직접 의존관계 주입, 설정정보 클래스에 직접 기입
2) 자동 빈 등록 - 자동 의존관계 주입, 주로 @Autowired 사용
스프링 컨테이너는 BeanFactory 인터페이스에서 출발한다.
https://docs.spring.io/spring-framework/docs/current/javadoc-api/
ApplicationContext의 상위 인터페이스https://docs.spring.io/spring-framework/docs/current/javadoc-api/
BeanFactory에서 부가 기능 추가AnnotationConfigApplicationContext의 인터페이스https://docs.spring.io/spring-framework/docs/current/javadoc-api/
출처
인프런 '스프링 핵심 원리 - 기본편' 강의