Bean 컨테이너와 ApplicationContext
스프링 빈이란
-
스프링 빈: 스프링 컨테이너에 등록되어 관리되는 객체
-
보통
@Component,@Service,@Repository,@Controller같은 어노테이션을 사용하거나,@Bean메서드로 직접 등록함 -
컨테이너는 빈을 만들기만 하는 것이 아니라, 필요한 의존관계를 주입하고 초기화와 종료 같은 생명주기도 함께 관리함
-
또한 빈이 어떤 범위에서 생성되고 유지될지에 따라 scope를 적용해 관리
BeanDefinition
-
BeanDefinition: 빈을 생성하고 관리하는 데 필요한 메타데이터 -
스프링 컨테이너는 빈 설정 정보(XML, 어노테이션 기반 설정 등)를 읽어 빈 등록 대상을 파악하고, 이를
BeanDefinition로 다룸 -
BeanDefinition에 포함되는 정보: 빈으로 생성할 클래스, 빈 이름, 스코프, 생성자 인자, 프로퍼티 값, 초기화 메서드, 소멸 메서드 -
컨테이너는 등록된
BeanDefinition을 바탕으로 빈을 생성하고, 필요한 의존관계를 주입하며, 초기화와 종료 같은 생명주기 처리를 수행
BeanFactory와 ApplicationContext
-
BeanFactory: 스프링 IoC 기능의 기반이 되는 인터페이스 -
빈을 생성하고, 의존 관계를 설정하고, 조회하는 기본적인 기능을 제공
-
BeanFactory만으로도 IoC 컨테이너의 핵심 기능은 수행할 수 있으나, 이름 그대로 빈 관리 자체에 초점을 둔 인터페이스 -
ApplicationContext는BeanFactory의 기능을 포함하면서, 실제 애플리케이션에서 자주 필요한 기능을 추가로 제공- 국제화(i18n) 메시지를 처리하는 메시지 소스 기능
- 애플리케이션 이벤트를 발행하고 리스너가 이를 처리할 수 있게 하는 이벤트 발행 기능
- 프로파일, 프로퍼티, 환경 변수 같은 설정 정보를 관리하는 환경 정보 관리 기능
- classpath, 파일 시스템, URL 등 다양한 위치의 리소스를 읽을 수 있게 하는 리소스 조회 기능
실무에서는 보통
BeanFactory를 직접 사용하기보다ApplicationContext를 사용함
ApplicationContext 구현체
ApplicationContext는 인터페이스이므로 실제로는 구현체를 통해 사용됨
AnnotationConfigApplicationContext
- 자바 설정 클래스와 어노테이션 기반 설정을 사용하는 구현체
@Configuration,@Bean,@ComponentScan같은 설정을 읽어 컨테이너를 구성함
ClassPathXmlApplicationContext
- classpath에 있는 XML 설정 파일을 읽어 컨테이너를 구성하는 구현체
- 과거 XML 기반 스프링 프로젝트에서 많이 사용되었고, XML 설정을 다룰 때 사용함
GenericWebApplicationContext
- 웹 환경에서 사용할 수 있는
ApplicationContext구현체 - 범용적인 컨테이너 구현체인
GenericApplicationContext를 웹 환경에 맞게 확장한 구현체
댓글