dev.jaieve 공부기록

[Spring] 스프링 컨테이너란? 본문

Back/Springboot

[Spring] 스프링 컨테이너란?

제이브 2022. 2. 19. 23:02

스프링 컨테이너란

스프링 컨테이너를 스프링의 Bean을 생성하고 관리한다. 기본적으로 빈은 싱글통으로 생성된다. 스프링 컨테이너는 2가지 유형이 있다고 한다.

  1. Bean Factory
  2. ApplicationContext

Bean Factory

  • 스프링 설정파일(@Configuration)에 등록된 Bean 객체를 생성하고 관리하는 기본적인 기능을 제공하는 IoC컨테이너이다. 하지만 실제 Bean의 생성 및 관리에는 추가적 기능이 필요해서 스프링컨테이너 두 번째 유형이자 Bean Factory를 상속받아 확장된 ApplicationContext을 주로 사용한다고 한다.

ApplicationContext란?

  • 컨테이너의 기본적인 기능(Bean 생성 및 관리)뿐만 아니라 트랜잭션 관리, 메시지 기반의 다국어 처리, AOP처리 등 의존성주입(Dependency Injection, DI), 제어의 역전((Inverse of Conversino) 등을 지원한다. @Configuration이 제공해주는 IoC 및 DI 설정정보를 읽어서 Bean 생성 및 관계를 설정한다.
  • Bean을 생성하고 관리하는 것은 상속하고있는 Bean Factory와 동일하지만 차이점이 있다면 Bean Factory는 Lazy Loading방식이고, ApplicationContext는 Pre-Loading 방식으로 빈을 만든다는 것이다.

Bean 생성과정 및 순서

  1. 프로그램이 구동되면서 ApplicationContext는 @Configuration이 붙은 클래스를 설정정보로 등록 & @Bean이 붙은 메서드의 이름을 bean목록으로 생성한다.(Pre-loading)
  2. (Lazy-loading)클라이언트가 해당 빈을 요청하면
  3. ApplicationContext는 자신의 빈 목록에서 요청된 bean이 있는 확인하고
  4. 있다면 설정정보클래스(@Configuration)에 빈 생성을 요청하고 생성된 빈을 return한다.

ApplicationContext의 종류

  • ApplicationContext는 AbstractApplicationContext의구현체이며 구현클래스 종류는 크게 GenericXmlApplicationContext와 XmlWebApplicationContext가 있다.
    (공식문서를 확인해보면 AppilcationContext 인터페이스 구현체 클래스는 훨씬 많은 것을 확인할 수 있다. 링크)
ApplicationContext context = new XmlWebApplicationContext();
// 기본설정값으로 root Context의 설정xml파일은 "/WEB-INF/applicationContext.xml"로 되어있다.

ApplicationContext context = new GenericXmlApplicationContext("xml directory");
// 별도의 설정파일 경로를 알려줘야 함. 이때 root는 src/

일반적으로 Spring MVC 환경을 제작하면 XmlWebApplicationContext가 스프링컨테이너로 자동으로 생성되되어 사용되지만, 직접 빈을 생성하여 xml설정 파일을 로딩하고 스프링을 구동할 때는 GenericXmlApplicationContext가 스프링컨테이너로 사용된다.

 

 


Reference

  1. https://mangkyu.tistory.com/151
  2. https://docs.spring.io/spring-framework/docs/current/javadocapi/org/springframework/context/ApplicationContext.html
  3. https://velog.io/@ehdrms2034/Spring-MVC-Application-Context.xml
  4. https://webie.tistory.com/91
반응형