스프링 컨테이너는 스프링 프레임워크의 핵심 컴포넌트로 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공한다.
스프링에서는 자바 객체를 빈(Bean)이라고 한다.
스프링 컨테이너는 BeanFactory와 ApplicationContext로 구분할 수 있는데 BeanFactory를 직접 사용하는 경우가 거의 없으므로 일반적으로 ApplicationContext를 스프링 컨테이너라 한다.
BeanFactory는 빈의 생성과 관계설정 같은 제어를 담당하며, BeanFactory를 좀 더 확장한 것이 ApplicationContext 이다.
스프링 컨테이너는 빈의 인스턴스화, 구성, 전체 생명 주기를 관리한다. 스프링 컨테이너를 통해 원하는 만큼 객체를 가질 수 있으며, 애플리케이션의 컴포넌트를 관리할 수 있다. 또한 서로 다른 빈을 연결하여 애플리케이션 빈을 연결하는 역할을 한다.
스프링 컨테이너는 XML을 기반으로 만들 수 있고, 어노테이션 기반의 자바 설정 클래스로 만들 수 있다.
아래 코드는 어노테이션 기반의 자바 설정 클래스로 컨테이너를 구성하고 스프링 컨테이너에 등록하여 스프링 컨테이너를 생성하는 예시이다.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);