ApplicationContext는 BeanFactory를 상속
AnnotaionConfigApplicationContext는 ApplicationContext의 구현체
🔹 스프링 컨테이너의 최상위 인터페이스
🔹 스프링 빈을 관리하고 조회하는 역할
🔹 BeanFactory 기능을 모두 상속받아서 제공
➡️ BeanFacotry 기능 + 부가 기능 제공
(부가 기능 -> 애플리케이션을 만들 때 필요한 공통 기능들)
🔹 MessageSource 인터페이스 제공
➡️ 국제화 기능
(접속한 국가에 따라 출력되는 언어가 다름)
🔹 EnvironmentCapable 인터페이스 제공
➡️ 환경 변수와 관련된 정보를 처리
(로컬, 개발, 운영, 스테이지 환경을 구분해서 처리)
🔹 ApplicationEventPublisher 인터페이스 제공
➡️ 이벤트를 발행하고 구독하는 모델을 편리하게 지원
🔹 ResourceLoader 인터페이스 제공
➡️ 편리한 리소스 조회
(파일, 클래스패스, 외부 등에서 파일 등을 읽어들여 내부에서 사용할 때 추상화하여 편리하게 사용할 수 있도록 지원)
BeanFacotory를 직접 사용할 일은 거의 없음
부가 기능이 포함된 ApplicationContext를 사용
BeanFactory나 ApplicationContext를 스프링 컨테이너라 함
스프링 빈 설정 메타 정보 - BeanDefinition
스프링은 다양한 설정 형식을 지원함 ex) 자바 코드, XML, Groovy 등
-> 다양한 설정 형식을 지원하는 것은 BeanDefinition 이라는 추상화 덕분스프링 컨테이너는 BeanDefinition을 기반으로 스프링 빈 생성
스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용
인프런 스프링 핵심 원리 - 기본편 (김영한) 참조