우와한 개발자

[Spring] 스프링 IoC 컨테이너란? - BeanFactory, ApplicationContext 정리

by 우와한개발자

[ 스프링 IoC 컨테이너 ]

1. IoC 컨테이너란?

1) 제어의 역전 IoC (InversionofControl)

  • 애플리케이션의 흐름 제어를 개발자가 아닌 프레임워크나 컨테이너가 담당하게 하는 것.
  • 즉, 객체 관리를 개발자가 직접 하지 않고 컨테이너에 위임하는 방식.

 

2) IoC 컨테이너

  • 객체의 생성, 관리, 의존성 주입(DI)을 담당하는 객체
  • 스프링 컨테이너를 IoC 컨테이너라고도 부름

 

3) 주요 기능

  • 빈(Bean)관리 : 빈(Bean)의 생성,초기화,의존성 주입, 소멸등 생명주기 관리
  • 의존성 주입(DI) : 생성된 객체들사이의 의존성을 주입
  • 라이프사이클관리 : 빈(Bean)의 생성, 초기화, 소멸, 종료과정 등 객체의 라이프사이클 관리

 

2. IoC 컨테이너 구현체

  • 스프링은 컨텍스트 클래스로 객체를 생성하고 관리하는 컨테이너 기능을 제공함.
  • 컨테이너로부터 빈(Bean)을 찾기 위해서는 컨텍스트가 반드시 필요함.

1) BeanFactory (인터페이스)

  • 스프링 IoC 컨테이너의 가장 기본적인 구현체
  • Lazy Loading 방식으로 동작하여, 빈을 실제로 요청하는 시점에 생성함.
구현체 로딩 방식 특징
BeanFactory Lazy Loading 요청 시점에 빈 생성
ApplicationContext Pre-Loading 시작 시점에 빈 미리 생성

 

2) ApplicationContext (인터페이스)

  • 거의 모든 스프링 애플리케이션에서 사용하는 구현체
  • Pre-Loading 방식으로 동작하여, 컨테이너 시작 시점에 모든 빈을 미리 생성함.

(1) GenericXmlApplicationContext(클래스)

  • XML설정파일을 사용해 빈 설정한 경우
// XML 설정 파일로 빈을 등록한 경우
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
MemberService memberService = context.getBean("memberService", MemberService.class);

 

(2) AnnotationConfigApplicationContext(클래스)

  • 자바 설정 클래스나 어노테이션을 사용해 빈 설정한 경우
// 자바 설정 클래스로 빈을 등록한 경우
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = context.getBean(MemberService.class);

 

(3) WebApplicationContext(클래스)

  • 웹 어플리케이션에 특화된 ApplicationContext
  • WebApplicationContext는 개발자가 직접 new로 생성하지 않고, DispatcherServlet이 자동으로 생성하고 관리함.
  • 일반 스프링 애플리케이션이 아닌 웹 환경에서만 사용함.

 

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기