의존관계 주입(Dependency Injection, DI)를 이용하여 애플리케이션을 구성하는 여러 Bean들의 LifeCycle과 애플리케이션의 서비스 실행등을 관리하며 생성된 인스턴스들에게 기능을 제공하는 Container.
Spring Container에서는 보통 Bean Factory와 ApplicationContext, 두 가지로 다룬다.
👍빈(Bean) - Spring이 직접 생성하고, 의존관계를 부여하는 객체들. (빈 chapter로 따로 다루기)
Spring Container의 최상위 Interface, Spring Bean을 관리하고 조회하는 역할.
빈 팩토리(BeanFactory)의 모든 기능을 상속받아 제공. 또 다른 수 많은 부가기능이 있음(메시지 소스, 환경변수, 애플리케이션 이벤트, 편리한 리소스 조회 등..). 빈 관리기능 + 부가기능.
두 컨테이너중 특별한 이유가 없다면, ApplicationContext를 사용해야 한다. 이는 공식문서에서 권장하는 내용. 이유는 BeanFactory의 기능을 포함하는 것은 물론 추가 기능들을 제공하기 때문이다.
설정에는 크게 두가지 방법이 있다.
어떻게 이런 다양한 설정 형싱을 지원하는가?
'BeanDefinition' 추상화가 있다. -> 빈(Bean)설정 메타정보
=> 역할과 구현을 개념적으로 나눈 것.
XML을 읽어 BeanDefinition을 만듬. 패키지까지 전부 등록
자바 코드를 읽어 BeanDefinition을 만듬. class에 실제 의존하는 것이 아닌 factoryBean에 등록해서 봄.
스프링 컨테이너는 다른 설정 정보들은 모른다. 오직 BeanDefinition만 보고 있다.
BeanDefinition은 직접 정의하거나 사용할 일은 거의 없다. 스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용하는 것 정도로 이해.
참고 : 본 글은 김영한님의 스프링 강의를 정리한 것이다.