[spring] 스프링 컨테이너와 스프링 빈

괭이밥·2022년 11월 5일

spring

목록 보기
1/10
post-thumbnail

✔ 목차

  1. 스프링 컨테이너란?
  2. 스프링 컨테이너 생성 및 빈 등록

📌 스프링 컨테이너란?

스프링 컨테이너는 객체를 관리하는 공간으로 볼 수 있다. 주로 객체를 생성하고, 객체간 필요한 의존관계를 주입해주며, 생명주기를 관리한다. 따라서 스프링 컨테이너는 IoC, DI 컨테이너이다.

제어의 역전 IoC(Inversion of Control)

  • 외부에서 프로그램의 흐름을 제어
  • 즉, 객체가 직접 프로그램의 흐름을 제어하지 않음!

프레임워크 vs 라이브러리

  • 프레임워크: 내가 작성한 코드를 프레임워크가 제어하고 대신 실행한다.
  • 라이브러리: 내가 작성한 코드가 직접 제어의 흐름을 담당한다.

의존관계 주입 DI(Dependency Injection)

  • 코드에서 다른 객체를 인터페이스에만 의존
  • 런타임 시점에 실제 인스턴스 주입해야 함

IoC 컨테이너, DI 컨테이너

  • 객체를 생성하고 관리
  • 객체에 대한 의존 관계 대신 주입
  • 스프링 컨테이너가 이에 해당!

스프링 컨테이너

  • IoC컨테이너, DI 컨테이너 (요즘은 DI 컨테이너라고 많이 불림)
  • BeanFactory, ApplicationContext 라고 불림
  • 스프링 빈 등록을 위해 설정정보 필요
  • 스프링 빈 = 구현 객체
  • 설정정보는 클래스, XML로 다양하게 구현 가능!


📌 스프링 컨테이너 생성 및 빈 등록

스프링 컨테이너는 설정정보를 받아 생성한다. 설정정보로는 자바 코드, XML 등으로 구현할 수 있다. 여기서는 자주 사용하는 자바 코드에 대해 설명할 것이다. 자바 코드는 애노테이션 기반으로 간단하게 구현할 수 있다.


스프링 컨테이너 생성 과정

스프링 컨테이너 생성 과정은 다음과 같다
1. 스프링 컨테이너 생성
2. 스프링 빈 등록
3. 의존 관계 주입

1. 스프링 컨테이너 생성

  • 애노에티션 기반 스프링 컨테이너 생성하기
    • import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    • new AnnotationConfigApplicationContext 객체 생성
      • ApplicationContext의 구현체
ApplicationContext applicationContext
                = AnnotationConfigApplicationContext(AppConfig.class);
  • 설정정보 클래스를 파라미터로 넘김 - ex. AppConfig.class

2. 스프링 빈 등록

스프링 빈 등록은 두 가지 방법이 있다.(위 그림에서 수동 빈 등록 이용)
1) 수동 빈 등록 - @Configuration@Bean 이용
2) 자동 빈 등록 - @ComponentScan@Component 이용


스프링 빈 등록하면 스프링 컨테이너 안에 저장된다.

스프링 빈 저장

  • <key, value> 형태로 저장
  • <빈 이름, 빈 객체>
    • key : 빈 이름
      • 수동 빈 등록 : 메서드 명이 빈 이름
      • 자동 빈 등록 : 클래스 명이 빈 이름 (시작 문자는 소문자로 바뀜)
    • value : 빈 객체

3. 의존관계 주입

스프링 빈 등록에 따라 의존관계 주입도 수동/자동으로 나뉜다.
1) 수동 빈 등록 - 직접 의존관계 주입, 설정정보 클래스에 직접 기입
2) 자동 빈 등록 - 자동 의존관계 주입, 주로 @Autowired 사용



스프링 컨테이너 구조

스프링 컨테이너는 BeanFactory 인터페이스에서 출발한다.

BeanFactory

https://docs.spring.io/spring-framework/docs/current/javadoc-api/

  • Spring bean 컨테이너에 액세스하기 위한 루트 인터페이스
  • ApplicationContext의 상위 인터페이스

ApplicationContext

https://docs.spring.io/spring-framework/docs/current/javadoc-api/

  • BeanFactory에서 부가 기능 추가
  • AnnotationConfigApplicationContext의 인터페이스

AnnotationConfigApplicationContext

https://docs.spring.io/spring-framework/docs/current/javadoc-api/

  • 애노테이션 기반 스프링 컨테이너 생성할 때 자주 사용하는 구현체


출처
인프런 '스프링 핵심 원리 - 기본편' 강의

profile
개발도 하고 싶은 클라우드 엔지니어

0개의 댓글