Spring | Spring Container & Spring Bean

yeonk·2022년 7월 9일
0

spring & spring boot

목록 보기
1/10
post-thumbnail

스프링 컨테이너(Spring Container)


자바 객체(빈)의 생명주기 관리 및 생성된 인스턴스들에게 추가적인 기능 제공
빈 생성, 관리, 제거 역할

  • 개발자가 진행하는 객체 생성 및 소멸을 대신 수행

  • 런타임 과정에서 객체들 간 의존 관계 생성

  • 작성한 코드의 처리 과정을 위임받은 독립 받은 존재

  • 파라미터로 들어온 설정 클래스 정보를 스프링 빈에 등록

  • 스프링 컨테이너를 통해 원하는 만큼 많은 객체를 가질 수 있음

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

    • 각각의 빈을 연결하여 애플리케이션의 빈 연결

    • 모듈간 의존 및 결합으로 발생하는 문제에서 자유로움





스프링 컨테이너의 목적


객체를 사용하기 위해서는 new 생성자를 사용해야하는데 그렇게 되면 객체가 무수히 많이 존재하고 서로 참조하게 된다. 이렇게 되면 의존성이 높아지고 이는 낮은 결합도와 높은 캡슐화를 핵심으로 가지는 객체지향 프로그래밍에서 벗어날 수 밖에 없다.

기존 방식에 따르면 변경 사항 수정 시 매우 비효율적이고 의존도가 높아져 더 많은 코드를 수정해야한다.
스프링 컨테이너를 사용한다면 의존을 제거하고 인터페이스에 의존하도록 설계가 가능한다.

그렇기 때문에 객체 간의 의존성을 낮추기 위한 목적으로 스프링 컨테이너를 사용한다.





스프링 컨테이너의 종류


Bean Factory

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

  • 스프링 빈 관리 및 조회 역할

  • getBean() 메소드 → 빈 인스턴스화

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





Application Context

출처: https://devlogofchris.tistory.com/m/71
  • Bean Factory 상속 → 빈 관리 및 조회

  • 부가 기능 제공

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

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

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

    • ResourceLoader: 파일, 클래스 패스, 외부 등 리소스를 편리하게 조회하기 위한 인터페이스





스프링 빈(Spring Bean)


스프링 컨테이너에 의해 관리되는 재사용 소프트웨어 컴포넌트
스프링 컨테이너가 관리하는 자바 객체

  • 인스턴스화된 객체

  • 스프링 컨테이너에 등록된 객체

  • @Bean 이 적힌 메서드를 호출해서 반환된 객체를 컨테이너에 등록

  • 클래스의 등록 정보 및 게터, 세터 메서드를 포함함

  • 컨테이너에 사용되는 설정 메타데이터로 생성(BeanDefinition) → XML 또는 자바 애너테이션과 코드로 표현, 컨테이너의 명령 및 인스턴스화, 설정, 조립할 객체 정의

  • 빈 설정 메타정보(BeanDefinition)

    • 속성에 따라 컨테이너의 빈 관리 및 생성 방식 결정

    • @Bean, <Bean> 당 1개의 메타 정보 생성

  • @Configuration : 구성 정보를 담당하는 것을 설정할 때 붙여주는 애너테이션

  • @Bean : 각 메서드에 해당 애너테이션을 붙이면 스프링 컨테이너에 등록됨





참고 자료


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

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

1.2. Container Overview

1.3. Bean Overview

40. XML Schema-based configuration

0개의 댓글