Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
* 김영한님의 스프링 핵심원리 기본편 강좌를 수강하며 정리한 글입니다. *
이전 글에서는 제어의 역전과 DI 컨테이너에 대해 정리하였다.
기존까지는 순수한 자바 문법만으로 구성 영역을 담당하는 DI 컨테이너(AppConfig)를 만들었다.
이번에는 스프링의 문법으로 재구성 해보도록 하자.
스프링 컨테이터와 스프링 빈
스프링 컨테이너를 사용하면 DI 컨테이너 역할을 하게 만들 수 있다.
이러한 스프링 컨테이너를 ApplicationContext 라고 한다.
클래스를 스프링 컨테이너로 설정하기 위해 어노테이션을 @Configuration 를 붙인다.
이 클래스의 @Bean 어노테이션이 붙은 모든 메서드를 호출해 반환하는 객체를 스프링 컨테이너에 등록하게된다.
이처럼 스프링 컨테이너에 등록된 객체들을 스프링 빈이라 칭한다.
@Bean 어노테이션이 붙은 메서드의 이름이 스프링 빈의 이름이 되고 해당 이름으로 조회를 하게된다.
이제 스프링 빈은 applicationContext.getBean("스프링 빈 이름", 타입.class) 과 같이 등록 이름과 타입을 통해 컨테이너에서 찾아 올 수 있다.
ApplicationContext은 스프링 컨테이너 class로 사실 인터페이스 이다.
이를 구현한 것 중 하나가 이전 글에서 사용한 AnnotationConfigApplicationContext(config.class)이다.
(ApplicationContext의 구현체는 이 외에도 굉장히 많다.)
클래스 명을 그대로 @Configuration 어노테이션이 붙은 자바 설정 클래스를 기반으로 스프링 컨테이너를 생성하는 것이다.
(스프링 컨테이너는 ApplicationContext와 BeanFactory로 구분되기도 하지만 일반적으로 ApplicationContext를 의미한다.)
스프링 컨테이너의 생성 과정은 다음과 같다.
1. 스프링 컨테이너 생성
new AnnotationConfigApplicationContext(AppConfig.class) 로 컨테이너 객체가 생성된다.
구성 정보로는 AppConfig가 지정되었다.
2. 스프링 빈 등록
구성 정보를 토대로 이름과 객체를 등록한다.
3. 스프링 빈 의존관계 설정
구성 정보에서 서로의 의존관계를 토대로 의존 관계 주입을 진행한다.
'개발 > Spring' 카테고리의 다른 글
[Spring] 6. 스프링 컨테이너 설정 정보와 BeanDefinition (0) | 2022.06.25 |
---|---|
[Spring] 5. 스프링 빈 조회, getBean() (0) | 2022.06.25 |
[Spring] 3. 제어의 역전(IoC)과 컨테이너 (0) | 2022.06.23 |
[Spring] 2. 구성 영역의 분리와 DI(Dependency Injection) (0) | 2022.05.30 |
[Spring] 1. 스프링의 시작과 SOLID 원칙 (0) | 2022.05.09 |