본문 바로가기
Spring

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

by 박성민 2021. 9. 11.
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
  • ApplicationContext를 스프링 컨테이너라 합니다.
  • ApplicationContext는 인터페이스입니다.
  • 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있습니다.
  • 직전에 AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것입니다.
  • 자바 설정 클래스 기반 스프링 컨테이너(ApplicationContext)
    • new AnnotationConfigApplicationContext(AppConfig.clss);
    • 이 클래스는 ApplicationContext 인터페이스의 구현체입니다.

참고: 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext로 구분해서 이야기합니다. BeanFactory를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext를 스프링 컨테이너라 합니다.

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

1. 스프링 컨테이너 생성
1

  • new AnnotationConfigApplicationContext(AppConfig.class)
  • 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 합니다.

2. 스프링 빈 등록
2

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

빈 이름

  • 빈 이름은 메서드 이름을 사용합니다.
  • 빈 이름을 직접 부여할 수 도 있습니다.
    • @Bean(name="memberService2")

주의: 빈 이름은 항상 다른 이름을 부여해야 합니다. 같은 이름을 부여하면, 다른 빈이 무시되거나, 기존 빈을 덮어버리거나 설정에 따라 오류가 발생합니다.

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

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

  • 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)합니다.
  • 단순히 자바 코드를 호출하는 것 같지만, 차이가 있습니다.

참고

스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있습니다. 그런데 이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리됩니다.

정리

스프링 컨테이너를 생성하고, 설정(구성) 정보를 참고해서 스프링 빈도 등록하고, 의존관계도 설정했습니다.

참조

댓글