프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

* 김영한님의 스프링 핵심원리 기본편 강좌를 수강하며 정리한 글입니다. *

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

 

 

이전 글에서는 제어의 역전과 DI 컨테이너에 대해 정리하였다.

기존까지는 순수한 자바 문법만으로 구성 영역을 담당하는 DI 컨테이너(AppConfig)를 만들었다.

이번에는 스프링의 문법으로 재구성 해보도록 하자.

 

 

스프링 컨테이터와  스프링 빈

스프링 컨테이너를 사용하면 DI 컨테이너 역할을 하게 만들 수 있다.

이러한 스프링 컨테이너ApplicationContext 라고 한다.

 

클래스를 스프링 컨테이너로 설정하기 위해 어노테이션을 @Configuration 를 붙인다.

 

이 클래스의 @Bean 어노테이션이 붙은 모든 메서드를 호출해 반환하는 객체를 스프링 컨테이너에 등록하게된다.

이처럼 스프링 컨테이너에 등록된 객체들을 스프링 빈이라 칭한다.

 

@Bean 어노테이션이 붙은 메서드의 이름이 스프링 빈의 이름이 되고 해당 이름으로 조회를 하게된다.

 

스프링 컨테이너 등록

 

AnnotationConfigApplicationContext(AppConfig.class) 를 통해 환경정보를 가져온다.

이제 스프링 빈은 applicationContext.getBean("스프링 빈 이름", 타입.class) 과 같이 등록 이름과 타입을 통해 컨테이너에서 찾아 올 수 있다.

 

실행 시 Log를 확인하면  AppConfig에 선언된 bean들이 메서드의 이름으로 컨테이너에 등록된것을 볼 수 있다.

 

 

 

ApplicationContext은 스프링 컨테이너 class로 사실 인터페이스 이다.

이를 구현한 것 중 하나가 이전 글에서 사용한 AnnotationConfigApplicationContext(config.class)이다. 

(ApplicationContext의 구현체는 이 외에도 굉장히 많다.)

클래스 명을 그대로 @Configuration 어노테이션이 붙은 자바 설정 클래스를 기반으로 스프링 컨테이너를 생성하는 것이다.

(스프링 컨테이너는 ApplicationContext와 BeanFactory로 구분되기도 하지만 일반적으로 ApplicationContext를 의미한다.)

 

 

스프링 컨테이너의 생성 과정은 다음과 같다.

 

1. 스프링 컨테이너 생성

new AnnotationConfigApplicationContext(AppConfig.class) 로 컨테이너 객체가 생성된다.

구성 정보로는 AppConfig가 지정되었다.

 

2. 스프링 빈 등록

구성 정보를 토대로 이름과 객체를 등록한다.

 

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

구성 정보에서 서로의 의존관계를 토대로 의존 관계 주입을 진행한다.

 

의존 관계는 AppConfig의 호출 관계를 통해 자동으로 생성된다.

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함