Development/Spring Boot

[Spring Boot] 스프링 컨테이너와 스프링 빈 (1) 생성 과정

sky Jeong 2022. 8. 13. 20:12

1- 스프링 컨테이너가 생성되는 과정

  • ApplicationContext
     = 스프링 컨테이너
     = 인터페이스
  • 스프링 컨테이너는 XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있음
    직전에 AppConfig를 사용한 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것

  • 요즘은 XML 형식 보다는 애노테이션 기반으로 스프링 컨테이너를 만듦
    - 스프링부트 자체가 애노테이션 기반에 작동이 편리하게 되어있기 때문 

  • 자바 설정 클래스를 기반으로 스프링 컨테이너(ApplicationContext) 만들기

    new AnnotationConfigApplicationContext( AppConfig.class );
    AnnotationConfigApplicationContext는 ApplicationContext 인터페이스의 구현체임

  • 참고
    - 스프링 컨테이너를 부를때 BeanFactory, ApplicationContext로 구분해 말함. (나중 설명 예정)
    - BeanFactory를 직접 사용하는 경우는 거의 없어 일반적으로 ApplicationContext를 스프링 컨테이너라 함

 

2- 스프링 컨테이너 생성

  1. 스프링 컨테이너 생성
    - 스프링 컨테이너 생성시 구성 정보 지정 ( 구성 정보는 AppConfig.class )
  2. 스프링 빈 등록
    - 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해 스프링 빈 등록
    - 빈 이름: 메서드 명 , 빈 객체: 리턴에서 넘겨주는 객체

    - 참고로 빈 이름은 name을 통해 직접 부여 가능하나, 관례적으로는 메서드명을 그대로 사용함
    @Bean ( name = "beanServiceName" )

    - 허나 빈(Bean) 이름은 항상 다른 이름 부여해야 함.
       같은 이름이 부여되어있을 경우 기존 빈을 덮어버리건 설정에 따라 오류가 발생함 (최근에는 경고 날리고 튕겨버림)

  3. 스프링 빈 의존관계 설정 - 준비 & 완료
    - 스프링 컨테이너에 객체 준비
    - 이후 스프링 컨테이너는 설정 정보를 참고해 의존 관계를 주입(DI)함
    - 단순히 자바 코드를 호출하는 것 같으나, 해당 차이는 싱글톤 컨테이너에서 설명 예정
    - 참고.
      스프링 빈을 생성하고 의존관계를 주입하는 단계가 나누어져 있음. (스프링의 라이프사이클)
      이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한 번에 처리됨.

      추가로 의존관계가 자동으로 주입되는 경우가 존재함. 이때는 단계가 두 단계로 나누어짐.

 

3- 정리

  • 스프링 컨테이너를 생성하고, 설정(구성( 정보를 참고해 스프링 빈 등록 및 의존관계 설정까지 완료한 것임
  • 이제 스프링 컨테이너에서 데이터 조회 수행