본문 바로가기
스터디/Spring

[Spring] Spring Container, BeanFactory 그리고 ApplicationContext

by zoodi 2021. 8. 17.
728x90

스프링에서 가장 중요한 개념인 Container, BeanFactory 그리고 ApplicationContext 에 대해서 알아보고자 한다.

스프링에서 BeanFactory 와 ApplicationContext는 IoC Container 역할을한다.

Spring Container

스프링에서 DI를 이용하여 애플리케이션을 구성하는 여러 빈들의 생명주기와 애플리케이션의 서비스 실행등을 관리하며 생성된 인스턴스들에게 기능을 제공하는 것. 컨테이너에 적절한 설정만 있으면 프로그래머의 개입 없이 작성된 코드를 컨테이너가 빈을 스스로 참조한 뒤 알아서 관리한다.

 

스프링 컨테이너는 주로 BeanFactory와 ApplicationContext 두 가지로 다룬다.

 

*빈(Bean) : 스프링이 제어권을 갖고 직접 생성 및 의존 관계를 부여하는 오브젝트. 빈 등록은 xml 이나 어노테이션을 통해 할 수 있다.

BeanFactory

빈을 생성하고 의존관계를 설정하는 기능을 담당하는 가장 기본적인 IoC 컨테이너이자 클래스.

스프링 빈 컨테이너에 접근하기 위한 최상위 인터페이스이다. 스프링 IoC Container 는 여러 용어를 혼합하여 사용하는데 Spring Container, IoC Container, Bean Conatiner 그리고 스프링이라고한다. 정확히는 Spring Bean Container 이다.

 

(공식 문서 : https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html)

 

ApplicationContext

ApplicationContext는 BeanFacotry를 상속받는 인터페이스다. 따라서 BeanFacotry를 구현하고 BeanFactory의 확장된 버전이라고 생각하면 된다. 역할로는 오브젝트 생성, 관계 설정, 자동생성 등 매우 다양한 역할을 하고 있다. 

또한 싱글톤을 저장하고 관리하는 싱글톤 레지스트리이다. 스프링은 별다른 설정하지 않으면 내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다.

 

(공식 문서 : https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/ApplicationContext.html

 

BeanFactory vs ApplicationContext

BeanFacotry : Lazy-Loading (실제 요청을 받는 시점에 인스턴스 생성)

ApplicationContext : Pre-Loading (즉시 인스턴스 생성)

 

Summary

 BeanFactory는 빈을 생성하고 의존 관계를 설정하는 IoC의 기본 기능을 의미한다면

ApplicationContext는 빈의 생성, 관계 설정 등의 제어를 총괄하는 것에 초점을 둔다.

 

스프링 공식문서에서는 두 컨테이너 중 특별한 이유가 없으면 ApplicationContext를 사용해야한다고 한다.

 

이유는 BeanFactory의 모든 기능을 포함하고 있을 뿐만 아니라 추가 기능을 제공하기 때문이다.

 


참고 : https://beststar-1.tistory.com/39

 

스프링 컨테이너(BeanFactory, ApplicationContext)

스프링 컨테이너(Spring Container) 스프링에서 의존관계 주입(Dependency Injection, DI)을 이용하여 애플리케이션을 구성하는 여러 빈(Bean)들의 생명주기(Lifecycle)와 애플리케이션의 서비스 실행 등을 관리

beststar-1.tistory.com

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#context-introduction-ctx-vs-beanfactory

 

Core Technologies

In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do

docs.spring.io

 

728x90

댓글