3.4.1 빈과 빈 팩터리
스프링의 의존성 주입 컨테이너의 핵심은 빈 팩터리(BeanFactory) 인터페이스입니다. 컴포넌트를 관리하는 BeanFactory는 컴포넌트의 라이프사이클뿐만 아니라 의존성까지 관리합니다. 스프링에서 빈(bean)이라는 용어는 컨테이너가 관리하는 모든 컴포넌트를 나타냅니다. 일반적으로 스프링의 빈을 작성하다 보면 자바빈 사양을 어느 정도 준수하게 되지만 꼭 그래야 하는 것은 아닙니다. 특히 생성자 주입을 사용해 빈을 서로 연결하려 할 때는 더욱 그렇습니다.
애플리케이션에서 DI 기능만 필요하다면 BeanFactory 인터페이스를 이용해 스프링 DI 컨테이너와 직접 연동할 수 있습니다. 이때는 애플리케이션에서 BeanFactory 인터페이스를 구현한 클래스의 인스턴스를 생성하고 빈과 의존성 정보를 구성해야 합니다. 이 작업이 완료되면 애플리케이션은 BeanFactory를 통해 빈에 접근해 필요한 일을 처리할 수 있습니다.
상황에 따라 이 설정은 모두 자동으로 이루어집니다. 예를 들어 웹 애플리케이션에서 스프링의 ApplicationContext는, 웹 컨테이너가 웹 애플리케이션을 시작하는 도중에 web.xml 디스크립터 파일에 선언된 ContextLoaderListener 클래스(스프링이 제공)를 이용해서 부트스트랩합니다. 하지만 대부분은 직접 BeanFactory를 설정해야 합니다. 3장의 모든 예제에서는 BeanFactory 구현체의 초기 설정을 직접 해야 합니다.