[Spring] 스프링 컨테이너(Spring Container)

SEB_BE_43_yeori316·2023년 2월 5일
0

Spring

목록 보기
6/22

스프링 컨테이너(Spring Container)

  • 스프링 컨테이너는 내부에 존재하는 애플리케이션 빈(Bean)의 생명주기를 관리합니다.
    (Bean 생성, 관리, 제거 등의 역할을 담당)

  • ApplicationContext를 스프링 컨테이너라고 하고 인터페이스로 구현됨 (다형성 적용)

  • 컨테이너는 개발자가 정의한 Bean을 객체로 만들어 관리하고 개발자가 필요로 할 때 제공

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

스프링 컨테이너는 왜 사용할까? - Why

  • 객체 간의 의존성을 낮추기 위해 Spring 컨테이너가 사용

문제점 및 Spring 컨테이너가 해결법이 되는 이유

  • 스프링 컨테이너를 사용하면 구현 클래스에 있는 의존을 제거하고 인터페이스에만 의존하도록 설계하여 추후 코드 변경 최소화

스프링 컨테이너의 생성 과정은 어떻게 될까요? How

  • 스프링 컨테이너는 Configuration Metadata를 사용

  • 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록

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

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

  • 애너테이션 기반의 자바 설정 클래스로 Spring을 만드는 것을 의미

// Spring Container 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(DependencyConfig.class);
  • XML 기반으로 만드는 ClassPathXmlApplicationContext도 있습니다.

  • XML 기반 구성 메타데이터의 기본 구조

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
       
    <bean id="..." class="...">  
        <!-- collaborators and configuration for this bean go here -->
     </bean>
       
     <bean id="..." class="...">
         <!-- collaborators and configuration for this bean go here -->
     </bean>
       
     <!-- more bean definitions go here -->
       
</beans>

<'beans />에 필요한 값들을 설정
<'bean id=”...”> : 빈 정의를 식별하는데 사용되는 문자열
<'bean class=”...”> : Bean의 유형을 정의하고 클래스 이름을 사용

  • 스프링 컨테이너를 만드는 다양한 방법은 ApplicationContext 인터페이스의 구현체
    • DependencyConfig.class 등의 구성 정보를 지정해줘서 스프링 컨테이너를 생성
    • DependencyConfig에 있는 구성 정보를 통해서 스프링 컨테이너는 필요한 객체들을 생성
    • 애플리케이션 클래스는 구성 메타데이터와 결합되어 ApplicationContext 생성 및 초기화된 후 완전히 구성되고 실행 가능한 시스템 또는 애플리케이션을 갖게 됨
  • 스프링 빈 조회에서 상속관계가 있을 시 부모타입으로 조회하면 자식 타입도 함께 조회
    • 모든 자바 객체의 최고 부모인 object타입으로 조회하면 모든 스프링 빈을 조회

ApplicationContext 인터페이스 구현체 확인법

  • 스프링 컨테이너를 만드는 다양한 방법은 ApplicationContext 인터페이스의 구현체
  • 화면에서 가장 첫번째 파일인 ApplicationContext 인터페이스를 구현한 하위 클래스들이 나오는 걸 확인
    • Mac에서 Cmd + O → 클래스에서 ApplicationContext로 검색
    • Windows에서 Ctrn + N → 클래스에서 ApplicationContext로 검색

스프링 컨테이너의 종류

  • 파라미터로 넘어온 설정 클래스 정보를 참고해서 빈의 생성, 관계 설정 등의 제어작업을 총괄하는 컨테이너
  • BeanFactory
    • 스프링 컨테이너의 최상위 인터페이스
    • BeanFactory는 빈을 등록하고 생성하고 조회하고 돌려주는 등 빈을 관리하는 역할
    • getBean() 메소드를 통해 빈을 인스턴스화
    • @Bean이 붙은 메서드의 명을 스프링 빈의 이름으로 사용해 빈 등록
  • ApplicationContext
    • BeanFactory의 기능을 상속받아 제공
    • 빈을 관리하고 검색하는 기능을 BeanFactory가 제공하고 그 외에 부가기능을 제공
    • 부가 기능(참고)
      - MessageSource : 메세지 다국화를 위한 인터페이스
      - EnvironmentCapable : 개발, 운영 등 환경변수 등으로 나눠 처리하고, 애플리케이션 구동 시 필요한 정보들을 관리하기 위한 인터페이스
      - ApplicationEventPublisher : 이벤트 관련 기능을 제공하는 인터페이스
      - ResourceLoader : 파일, 클래스 패스, 외부 등 리소스를 편리하게 조회

컨테이너 인스턴스화

  • ApplicationContext 생성자에 제공된 위치 경로 또는 경로는 컨테이너가 로컬 파일 시스템, Java CLASSPATH 등과 같은 다양한 외부 리소스로부터 구성 메타데이터를 로드할 수 있도록 하는 리소스 문자열
// Annotation
ApplicationContext context = new AnnotationConfigApplicationContext(DependencyConfig.class);

// XML
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");

0개의 댓글