스프링 컨테이너에 대해 자세히 알아보자.
스프링 컨테이너의 생성 과정
스프링 컨테이너가 생성되는 과정을 그림으로 살펴보자. 먼저 다음의 코드로 스프링 컨테이너를 생성한다.
...
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)한다. 동적인 객체 인스턴스 의존 관계를 실제로 스프링이 연결해주는 것이다. 즉, 객체의 참조값들이 연결이 되는 것이다.
이것이 단순히 자바 코드를 호출하는 것 같지만, 큰 차이가 있다. 이는 싱글톤 컨테이너에서 설명하겠다.
위의 과정을 통해 스프링 컨테이너를 생성하고, 설정(구성) 정보를 참고해서 스프링 빈을 등록하고, 의존 관계도 설정했다.
다음 포스팅에서는 이 스프링 컨테이너에서 데이터를 조회해보자.
'스프링(Spring) > Spring' 카테고리의 다른 글
[Spring] 스프링 빈 조회 - 기본 (0) | 2022.08.01 |
---|---|
[Spring] 컨테이너에 등록된 모든 빈 조회 (0) | 2022.08.01 |
[Spring] 스프링으로 전환하기 (0) | 2022.07.30 |
[Spring] IoC, DI, 컨테이너 (0) | 2022.07.29 |
[Spring] 새로운 구조와 할인 정책 적용 (0) | 2022.07.29 |