둘셋 개발!

[spring] 스프링 컨테이너와 스프링 빈 본문

SPRING/spring 기본

[spring] 스프링 컨테이너와 스프링 빈

23 2022. 3. 9. 22:58

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

스프링 컨테이너는 @Configuration이 붙은 클래스를 설정(구성) 정보로 사용한다. 그 안에서 @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이때 등록된 것이 스프링 빈이다.

 

그림으로 살펴보면

먼저 구성 정보(AppConfig.class)를 지정한 스프링 컨테이너를 생성하고, 만들어진 스프링 컨테이너에는 key, value의 형태로 빈 이름과 빈 객체를 저장한다. 

 

다음은 스프링빈을 등록한 컨테이너의 모습이다.

여기서 주의할 점은 스프링 빈이름은 중복이 절대 불가하다는 것이다.

 

그리고 스프링 컨테이너에서 빈의 의존관계를 주입할 때는 설정 정보를 참고한다. 스프링 빈을 등록할 때 생성자를 호출하면서 의존관계 주입도 한번에 처리가 된다.

 


BeanFactory

: 스프링 컨테이너의 최상위 인터페이스이다. 그리고 이는 스프링 빈을 관리하고 조회하는 기능을 제공한다.

 

다음은 BeanFactory와 관련된 상속관계를 그림으로 표현한 것이다.

ApplicationContext 인터페이스는 BeanFactory의 기능을 모두 포함하고 수많은 부가기능 제공한다.

(당연한 거지만, BeanFactory, ApplicationContext는 스프링 컨테이터임)

현재 그림에서는 애노테이션을 기반한 자바코드 설정만 사용하지만, 사실은 다양한 설정 형식을 지원한다.

 

이렇게 다양한 설정 형식을 지원할 수 있는 것은 BeanDefinition이라는 추상화가 있기 때문이다.

스프링에서는 애노테이션을 기반한 자바코드인지 Xml인지 몰라도 되고, 오직 BeanDefinition만 알면된다.

 


BeanDefinition

BeanDefinition은 빈 설정 메타정보이고, @Bean, <bean> 당 각각 하나씩 메타 정보가 생성된다.

그리고 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.

이를 그림으로 표현하면 다음과 같다.

기억해야 할 점은 스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용한다는 것이다.

 

(참고 : 인프런 김영한 강사님 - 스프링 핵심원리 - 기본편 )

'SPRING > spring 기본' 카테고리의 다른 글

[spring] 빈 생명주기 콜백  (0) 2022.03.14
[spring] 의존관계 주입  (0) 2022.03.13
[spring] 컴포넌트 스캔  (0) 2022.03.13
[spring] 싱글톤 컨테이너  (0) 2022.03.10