Kim-Baek 개발자 이야기

[스프링 핵심원리] 22. 스프링 컨테이너 생성 본문

개발/Spring

[스프링 핵심원리] 22. 스프링 컨테이너 생성

김백개발자 2021. 10. 25. 10:54
김영한님의 [스프링 핵심 원리] 강의를 정리하고, 내가 생각한 내용까지 정리하는 포스팅

이전에 AppConfig를 스프링으로 전환하는 과정을 진행했다. 스프링 컨테이너가 이제 그 역할을 해주는 것이라고 설명을 하였는데, 이번에는 스프링 컨테이너가 생성되는 과정을 한번 살펴보고자 한다.

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
  • ApplicationContext 를 우리는 스프링 컨테이너라고 한다.
  • ApplicationContext 는 인터페이스이다. 그 말은 여러가지 구현체를 사용할 수 있다는 뜻이다.
  • 스프링 컨테이너는 XML을 기반으로 할 수도 있고, 애노테이션 기반의 자바 설정 클래스로도 만들 수 있다.
  • 우리가 사용한 AppConfig 의 설정은 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 현재는 해당 방식을 가장 많이 사용한다.
  • 자바 설정 클래스를 기반으로 스프링 컨테이너를 생성해보는 것이 위에 작성한 코드이다.
    • AnnotationConfigApplicationContext 는 ApplicatonContext 인터페이스의 구현체이다.

실제로 엄청나게 많은 구현체들이 존재하는 것을 볼 수 있다.

※ 정확하게는 스프링 컨테이너를 부를 때, BeanFactory, ApplicationContext 로 구분해서 이야기한다. BeanFactory 를 직접 사용하는 경우는 거의 없기 때문에 일반적으로 ApplicationContext를 스프링 컨테이너라 한다.

1. 스프링 컨테이너 생성

  • new AnnotationConfigApplicationContext(AppConfig.class) 에 대한 내용이다
  • 스프링 컨테이너를 생성할 때는 어떤 구성 정보를 쓸 것인지를 지정해야한다. 여기서는 AppConfig.class를 구성정보로 지정하였다.

2. 스프링 빈 등록

  • 스프링 컨테이너는 생성 시 넘어온 설정 클래스의 정보를 통해서 스프링 빈을 등록하게 된다.

빈 이름

  • 빈 이름은 기본적으로 메서드 이름이 사용된다.
  • 원하는 경우 빈 이름을 직접 부여하는 것도 가능하다.
    • @Bean(name="CustomMemberService")

※ 빈 이름은 항상 유니크 하게 부여해야한다. 같은 이름이 사용되면 다른 하나가 무시되는 경우가 생긴다.

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

빈을 다 생성을 했다면 의존관계를 설정하기 위해서 준비한다.

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

  • 스프링 컨테이너는 설정 정보를 참고하여 의존관계를 주입한다. ( DI )
  • 이렇게만 보면 단순히 자바코드를 실행하는 것과 무슨 차이인가? 라는 생각이 되는데... 이어지는 강의에서 설명을 추가로 해준다하니 계속 공부를 해보도록 하자

 

참고

스프링은 빈을 생성하고 의존관계를 주입하는 단계가 나누어져있다. 하지만 이렇게 자바코드로 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리된다. 여기에서는 이해를 돕기 위해서 나눠서 설명한 것이다.

 


 

반응형
Comments