스프링에서 자바 객체들을 관리하는 공간을 말한다.
Spring Container에서 Bean의 생성부터 소멸까지를 개발자 대신 관리해주는 곳이다.
인스턴스의 생성부터 소멸까지의 객체 생명주기 관리를 개발자가 하는 대신 스프링(컨테이너)가 관리하는 것을 말한다.
개발자는 New 연산자, 인터페이스 호출, 팩토리 호출방식으로 객체를 생성하고 소멸시킨다.
IoC를 실제로 구현하는 방법으로서 의존성있는 컴포넌트 간의 관계를 개발자가 직접 코드로 명시하지 않고, 컨테이너인 Spring이 런타임에 찾아서 연결해준다.
BeanFactory는 Bean을 등록 / 생성 / 조회하고 돌려주는 등 Bean을 관리한다.
getBean()
이 호출되면 factory는 의존성 주입을 통해 Bean을 인스턴스화하고, Bean의 특성을 설정하기 시작한다.
ApplicationContext 컨테이너가 BeanFactory의 기능을 포함하면서 추가적인 기능을 제공하기 때문에 ApplicationContext를 대부분 사용한다.
- BeanFactory를 상속하고, BeanFactory보다 향상된 컨테이너이다.
- 스프링이 제공하는 각종 부가 서비스를 추가로 제공한다.
- 국제화가 지원되는 메시지를 관리해준다.
- 이미지와 같은 파일 자원을 로드할 수 있는 포괄적인 방법을 제공한다.
BeanFactory
처음으로 getBean()이 호출할 때 해당 Bean을 생성한다.
ApplicationContext
context 초기화할 때 모든 싱글톤(Singleton) Bean을 미리 로드한 후에 애플리케이션 가동 후에는 Bean을 로딩없이 얻을 수 있다.
(미리 Bean을 생성해서 Bean이 필요할 때 즉시 사용 가능)