[스프링 핵심원리] - 3.스프링 컨테이너와 스프링 빈 (6)

Chooooo·2022년 11월 4일
0
post-thumbnail

이 글은 강의 : 김영한님의 - "스프링 핵심원리 - 기본편"을 듣고 정리한 내용입니다. 😁😁


이번에는 스프링 빈 설정 메타 정보(BeanDefinition)에 대해서 알아볼 것이다.

스프링 빈 설정 메타 정보(BeanDefinition)

스프링이 다양한 설정 형식을 지원할 수 있는 이유는 바로 BeanDefinition이라는 추상화가 있다.

즉, 설정 정보의 역할과 구현을 개념적으로 분리한 것으로 설정 정보를 추상화시켰다.
스프링 컨테이너는 BeanDefinition(역할)만 알고 자바 코드인지, XML 인지(구현)은 몰라도 된다.
xml을 읽어 BeanDefinition만들고, 역시 자바 코드를 읽어 BeanDefinition을 만들고..

BeanDefinition는 빈 설정 메타 정보

  • @Bean / 하나당 하나씩 메타 정보가 생성된다.

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

코드레벨로 깊게 보기

😂 어려우면 그냥 그러가보다하고 넘어가도 되는 부분!

  • AnnotationConfigApplicationContext 는 AnnotatedBeanDefinitionReader 를 사용해서 AppConfig.class 를 읽고 BeanDefinition 을 생성한다.
  • GenericXmlApplicationContext 는 XmlBeanDefinitionReader 를 사용해서 appConfig.xml 설정 정보를 읽고 BeanDefinition 을 생성한다.
  • 새로운 형식의 설정 정보가 추가되면, XxxBeanDefinitionReader를 만들어서 BeanDefinition 을 생성하면 된다.

정리

이번 부분 BeanDefinition을 직접 생성해서 스프링 컨테이너에 등록할 수도 있다. 하지만 실무에서 BeanDefinition을 직접 정의하거나 사용할 일은 거의 없으니 어려우면 그냥 넘어가자.

  • BeanDefinition에 대해서는 너무 깊이있게 이해하기 보다는, 스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용하는 것 정도만 이해하면 된다.
  • 가끔 스프링 코드나 스프링 관련 오픈 소스의 코드를 볼 때, BeanDefinition 이라는 것이 보일 때가 있다. 이때 이러한 메커니즘을 떠올리면 된다.
profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글