Study/Spring

[스프링 핵심 원리 - 기본편] 스프링 컨테이너와 스프링 빈(스프링 컨테이너 생성)

black6765 2022. 12. 21. 21:33

스프링 컨테이너 생성

  • 스프링 컨테이너가 생성되는 과정
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
  • ApplicationContext를 스프링 컨테이너라고 함
  • ApplicationContext는 인터페이스
    • 이를 구현한 것 중 하나가 AnnotationConfigApplicationContext임
  • 스프링 컨테이너는 XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로도 만들 수 있음
    • 요즘에는 XML 기반은 잘 사용하지 않음
    • 애노테이션 기반이 편리하기 때문에 대부분 애노테이션 기반 방식을 사용
  • 직전에 AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것
  • 참고: 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext 로 구분해서 이야기한다.
    • BeanFactory 를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext 를 스프링 컨테이너라 한다.

 

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

1. 스프링 컨테이너 생성

  • new AnnotationConfigApplicationContext(AppConfig.class)
  • 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 함
  • 여기서는 AppConfig.class를 구성 정보로 전달
  • 스프링 빈 저장소의 key는 빈 이름, value는 빈 객체가 됨

 

2. 스프링 빈 등록

  • 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용하여 스프링 빈을 등록함
  • 메소드 이름을 빈 이름으로, return으로 반환하는 객체를 빈 객체로 등록
    • 4개의 new로 생성한 인스턴스 객체가 등록이 됨
    • 이를 스프링 빈이라 함
  • 빈 이름
    • 빈 이름은 보통 메소드 이름을 사용
    • 빈 이름을 직접 부여할 수도 있음
      • @Bean(name="이름")
    • 빈 이름은 항상 다른 이름을 부여해야 함
      • 같은 이름을 부여하면, 다른 빈이 무시되거나 기존 빈을 덮어버리거나 설정에 따라 오류가 발생

 

3. 스프링 빈 의존관계 설정 - 준비

  • 오른쪽의 초록색 원들이 스프링 빈

 

4. 스프링 빈 의존관계 설정 - 완료

  • 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)
  • 단순히 자바 코드를 호출하는 것 같지만, 차이가 있음
    • 이 차이는 뒤의 싱글톤 컨테이너에서 설명
  • 참고
    • 스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있음
      • 그런데 이렇게 자바 코드로 스프링빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리됨
    • 여기서는 이해를 돕기 위해 개념적으로 나누어 설명
      • 자세한 내용은 의존관계 자동 주입에서 다시 설명

 

※ 본 게시글은 인프런의 스프링 핵심 원리 - 기본편(김영한)을 수강하고 정리한 내용입니다.