Spring

[Spring] 스프링 빈 생성과정 / 스프링 빈 구성 정보 파일 지원 과정

MoveForward 2023. 11. 10. 21:30
728x90

해당 포스팅은 김영한 님의 인프런 강의 "스프링 핵심 원리 - 기본편" 을 통해 얻은 지식을 정리한 자료 입니다.

[참고 자료]

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard


 

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

 

"ApplicationContext" 는 인터페이스 로서, '스프링 컨테이너' 라고 보아도 무방하다.

ApplicationContext

 

 

이를 구현한 것 중 하나가 "AnnotationConfigApplicationContext" 이다.

(어노테이션 기반의 자바설정 클래스로 이를 활용하여 스프링 컨테이너를 만든다.)

(정확하게는 "AnnotationConfigApplicationContext"'AppConfig.class' 와 같은 자바형태의 빈 구성정보 파일을 활용하여, 스프링 컨테이너를 생성한다.)

AnnotationConfigApplicationContext

 

 

 

스프링 컨테이너 생성과정

 

'AppConfig.class' 와 같은 자바 형태의 빈 구성정보 파일을 사용하는 경우로 설명한다.

 

0. 빈 설정 파일 생성

<TestConfigByJava.class>

<TestConfigByJava.class>

설명을 위해 임의로 생성한 자바 기반 config 파일.

빈으로 'memberRepository1', 'memberRepository2', 'orderService1' , 'discountPolicy' 를 등록한다.

 

1. 스프링 컨테이너 생성

* 스프링 컨테이너는 'TestConfigByJava.class' 를 기반으로 생성한다.

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfigByJava.class);

스프링 컨테이너가 생성됨과 동시에 스프링 빈 저장소가 함께 생성된다.

 

2. 스프링 빈 등록하기

"TestConfigByJava.class" 구성 정보를 통해, 스프링 컨테이너가 스프링 빈 저장소를 채운다.

생성된 애플리케이션 스프링 빈을 보면,

config 클래스인 'springContainer.TestConfigByJava' ,

'memberRepository1' ,

'memberRepository2' ,

'orderService1' ,

'discountPolicy'

이 생성된 것을 볼수 있다.

'빈 이름' 과 '빈 객체'

※ 기본적으로 메서드 이름이 스프링 빈 이름으로 설정된다. (별도 설정도 가능하다. 중복은 절대 금지!)

※  메서드의 반환 객체가 해당 빈 객체가 된다.

채워진 스프링 빈 컨테이너

※ 사실상 " 1. 스프링 컨테이너 생성 " 과 " 2. 스프링 빈 등록하기 "는 동시에 일어난다.

 

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

빈 사이의 의존관계를 설정 한다.

스프링 빈 의존관계 설정

스프링 빈 구성 정보 파일인 "TestConfigByJava.class" 에 따라 '스프링 빈' 간의 의존관계가 설정된다.


2. 다양한 형식의 스프링 빈 구성 정보 파일 지원 과정

 

스프링은 다양한 형식의 스프링 빈 구성 정보 파일을 지원한다.

스프링은 스프링 빈 설정 메타 정보를 담고 있는 'Bean Definition' 을 읽고, 스프링 빈을 생성한다.

xxx.class , xxx.xml 등 다양한 형식의 파일 이더라도, 'Bean Definition' 만 만들어 진다면, 스프링은 빈을 생성할 수 있다.

따라서, 스프링 컨테이너 입장에서는 config 파일(빈 구성정보)이 어떠한 형식이던 상관 없다!

 

대표적으로 빈 구성정보 파일 형식은 'JAVA 파일' , 'XML' 파일 2가지 이다.

 

스프링 빈 구성 정보 파일이 Bean 으로 등록되는 과정은 다음과 같다.

"ApplicationContext"는 인터페이스 로서, 추상화 되어있다. (스프링 컨테이너 역할)

이를 JAVA 파일 형태(어노테이션 형식)을 지원하도록 구체화 한 클래스가

"AnnotaionConfigApplicationContext" 이다.

 

(xxx.class 형식) 등록 과정은 다음과 같다.

1. "AnntatedBeanDefinitionReader""TestConfigByJava.class"의 설정 정보를 읽어온다.

2. "AnntatedBeanDefinitionReader"는 읽어온 정보를 바탕으로 빈 메타 정보인 'BeanDefinition'를 생성한다.

3. "AnnotaionConfigApplicationContext"'BeanDefinition' 을 읽어 스프링 빈을 생성한다.

 

xxx.xml 형식도 동일하다.

다만 xml 파일 형태를 지원하도록 하는 별도의 클래스가 역할을 수행한다.

 

사용자가 별도의 형식을 지원하도록 설정할 수도 있다.

728x90