1장에서는 스프링의 컨테이너인 애플리케이션 컨텍스트를 이용해 빈을 정의하고 사용하는 방법을 알아본다. 스프링은 매우 다양하고 세련된 IoC/DI 방법을 제공한다. 책에서 소개된 내용 외에 더 다양한 방법들을 알고싶으면 스프링 레퍼런스 매뉴얼을 참고하면 된다. (최신버전)
스프링 애플리케이션에서는 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당한다. 이를 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다. 그래서 스프링 컨테이너를 IoC 컨테이너라고도 한다.
이 IoC 컨테이너를 스프링에선 빈 팩토리 또는 애플리케이션 컨텍스트라고도 한다. 오브젝트의 생성과 오브젝트 사이의 런타임 관계를 설정하는 DI 관점으로 볼 때는 빈팩토리라고 한다. 스프링 컨테이너는 단순한 DI 작업보다 더 많은 일을 하는데 여러가지 컨테이너 기능을 추가한 것을 애플리케이션 컨텍스트라고 한다. 즉, 애플리케이션 컨텍스트는 그 자체로 IoC와 DI를 위한 빈 팩토리이면서 그 이상의 기능을 가졌다고 보면 된다.
스프링의 IoC 컨테이너는 일반적으로 애플리케이션 컨텍스트를 말한다. 스프링의 빈 팩토리와 애플리케이션 컨텍스트는 각각 기능을 대표하는 BeanFactory
와 ApplicationContext
라는 두 개의 인터페이스로 정의되어 있다. ApplicationContext
인터페이스는 BeanFactory
인터페이스를 상속한 서브인터페이스다.
public interface ApplicationContext extends
ListableBeanFactory, HierarchicalBeanFactory, ... {
ApplicationContext
인터페이스의 정의를 보면 ListableBeanFactory
와 HierarchicalBeanFactory
라는 두 개의 BeanFactory
로 끝나는 인터페이스를 상속하고 있는데, 이 두 개의 인터페이스 모두 BeanFactory
인터페이스의 서브인터페이스다. 따라서 ApplicationContext
는 BeanFactory
인터페이스를 상속하고 있다.