[Spring] 스프링 컨테이너

zini9188·2023년 2월 7일
0

Spring

목록 보기
8/33

스프링 컨테이너란?


스프링 프레임워크의 핵심 컴포넌트로 내부에 존재하는 빈들의 생명주기를 관리한다.

  • 관리를 위해 IoC사용

  • BeanFactory, ApplicationContext 두 개의 컨테이너로 DI가 이루어진 빈들을 제어하고 관리

  • Bean의 생성, 관리, 제거 등의 역할을 담당

  • 스프링 컨테이너는 XML, 애너테이션 기반의 자바 설정 클래스로 생성

  • 빈의 인스턴스화, 구성, 전체 생명 주기 및 제거까지 처리

  • 원하는 만큼 많은 객체를 가짐

  • 의존성 주입을 통해 애플리케이션의 컴포넌트를 관리

    • 서로 다른 빈을 연결해 애플리케이션의 빈을 연결하는 역할
    • 개발자는 모듈 간에 의존 및 결합으로 인해 발생하는 문제로부터 자유로울 수 있음

스프링 컨테이너의 이점


기존의 방식으론 새 정책이 생기게 될 경우 변경 사항의 수정이 수작업으로 진행됐다. 서로 의존이 많지 않다면 일일이 수정하겠지만, 서비스 코드가 거대해질 수록 수정이 어려워진다.

하지만 스프링 컨테이너를 사용하면서 구현 클래스에 있는 의존을 제거하고 인터페이스에만 의존하도록 설계할 수 있다.

스프링 컨테이너의 생성 과정


  • Configuration MetaData를 사용

  • 파라미터로 넘어온 설정 클래스 정보를 사용하여 스프링 빈을 등록

  • new AnnotaionConfigApplicationContext(구현 정보.class)로 스프링에 있는 @Bean의 메서드에 등록

  • 애너테이션 기반 컨테이너 구성

  • XML 기반의 ClassPathXmlApplicationContext도 존재

  • ApplicationContext 인터페이스의 구현체를 이용한 구현

    • DependencyConfig.class 등의 구성 정보를 지 정해줘서 스프링 컨테이너를 생성

    • DependencyConfig에 있는 구성 정보를 통해서 스프링 컨테이너는 필요한 객체들을 생성

    • 애플리케이션 클래스는 구성 메타 데이터와 결합되어 ApplicationContext 생성 및 초기화된 후 완전히 구성되고 실행 가능한 시스템 또는 애플리케이션을 구성

  • 스프링 빈 조회에서 상속관계가 있을 시 부모타입으로 조회하면 자식 타입도 함께 조회

    • 모든 자바 객체의 최고 부모인 object타입으로 조회하면 모든 스프링 빈을 조회

스프링 컨테이너의 종류


BeanFactory

  • 스프링 컨테이너의 최상위 인터페이스

  • 빈을 등록하고 생성하고 조회하고 돌려주는 등 빈을 관리하는 역할

  • getBean() 메서드를 통해 빈을 인스턴스화

  • @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용해 빈 등록

ApplicationContext

  • BeanFactory의 기능을 상속받아 제공

  • 빈을 관리하고 검색하는 기능을 BeanFactory가 제공하고 그 외에 부가기능을 제공

  • 부가 기능

    • MessageSource: 메세지 다국화를 위한 인터페이스

    • EnvironmentCapable: 개발, 운영 등 환경변수 등으로 나눠 처리하고, 애플리케이션 구동 시 필요한 정보들을 관리하기 위한 인터페이스

    • ApplicationEventPublisher: 이벤트 관련 기능을 제공하는 인터페이스

    • ResourceLoader: 파일, 클래스 패스, 외부 등 리소스를 편리하게 조회

profile
백엔드를 지망하는 개발자

0개의 댓글