[Spring] 스프링 컨테이너 생성

스프링 컨테이너에 대해 자세히 알아보자.


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

스프링 컨테이너가 생성되는 과정을 그림으로 살펴보자. 먼저 다음의 코드로 스프링 컨테이너를 생성한다.

...
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
...

앞서 본 것과 같이, ApplicationContext를 스프링 컨테이너라 하고 ApplicationContext는 인터페이스이다. 즉 다형성이 적용된 것이다. ApplicationContext를 구현한 것 중 하나가 AnnotationConfigApplicationContext인 것이다. → 인터페이스의 구현체

스프링 컨테이너는 어노테이션(@) 기반의 자바 설정 클래스로 만들어지지만, XML을 기반으로 만들 수도 있다. 하지만 최근에는 XML 기반으로 만드는 것은 잘 사용하지 않는다.

 

1. 스프링 컨테이너 생성

위의 코드를 통해 AppConfig.class의 정보를 넘겨준다. 그러면 스프링 컨테이너가 만들어지고 Key는 빈 이름, Value는 빈 객체가 되어 스프링 빈 저장소가 채워지게 된다. 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 하는데, 이것이 AppConfig.class를 파라미터로 넘긴 것이 된다. 스프링 컨테이너가 이 AppConfig.class의 정보를 보고 객체를 생성해야겠다는 것을 인지한다. 

2. 스프링 빈 등록

스프링 컨테이너가 생성이 되면서 스프링 빈 저장소에 스프링 빈을 등록을 할 것이다. @Bean이 붙은 메서드를 모두 호출하여 저장소에 저장한다. 이때 빈 이름메서드의 이름(메서드 명), 빈 객체반환된 객체가 등록된다. 이를 스프링 빈이라 한다.

※스프링 빈의 이름은 항상 다른 이름을 부여해야 한다. 

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

객체를 생성한 다음, 스프링 빈 의존관계 설정을 준비한다.

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

그리고는 스프링 컨테이너가 설정 정보를 참고해서 의존관계를 주입(DI)한다. 동적인 객체 인스턴스 의존 관계를 실제로 스프링이 연결해주는 것이다. 즉, 객체의 참조값들이 연결이 되는 것이다. 

이것이 단순히 자바 코드를 호출하는 것 같지만, 큰 차이가 있다. 이는 싱글톤 컨테이너에서 설명하겠다.


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

다음 포스팅에서는 이 스프링 컨테이너에서 데이터를 조회해보자.