[spring기본]4. 스프링 컨테이너와 스프링 빈- BeanFactory,ApplicationContext,BeanDefinition

이건회·2022년 8월 30일
0

springbasic

목록 보기
6/14

BeanFactory

  • BeanFactory는 스프링 컨테이너의 최상위 인터페이스다.
  • 스프링 빈을 관리하고 조회하는 역할을 담당한다
  • getBean()을 제공한다.
  • 대부분의 기능을 얘가 제공함

ApplicationContext

  • ApplicationContext는 빈 팩토리의 기능 모두 상속
  • 그럼 둘의 차이는 뭘까?
  • 빈 관리 조회 이외에도 많은 부가기능을 ApplicationContext에서 제공

ApplicationContext가 제공하는 부가기능이란?

  • 메시지 소스를 활용한 국제회 기능 : 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력

  • 환경변수 : 로컬(내pc), 개발(테스트서버), 운영(실제 서비스) 등을 구분해서 처리

  • 애플리케이션 이벤트 : 이벤트를 발행하고 구독하는 모델을 편리하게 지원

  • 편리한 리소스 조회 : 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회

  • BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext를 보통 얘기한다.

다양한 설정 형식 지원 - 자바 코드, XML

  • 스프링 컨테이너는 다양한 형식의 설정 정보를 받아들일 수 있게 유연하게 설계되어 있다.

  • 위와 같이 ApplicationContext를 상속받아 쓸 수 있도록 미리 설계되어 있다.

  • 애노테이션 기반 자바 코드 설정 사용: 지금껏 했던 방식처럼 new AnnotationConfigApplicationContext(AppConfig.class) 사용


  • XML 설정 사용 : GenericXmlApplicationContext 를 사용하면서 xml 설정 파일을 넘기면 된다

스프링 빈 설정 메타 정보 - BeanDefinition

  • 스프링이 이렇게 다양한 설정 형식을 지원하는 것은 BeanDefinition 이라는 추상화 덕분이다.
  • xml, 자바코드 등을 읽어서 BeanDefinition을 만들면 된다. 스프링 컨테이너는 BeanDefinition만 알면 xml인지 ,자바코드인지를 몰라도 된다.
  • BeanDefinition 을 빈 설정 메타정보라 하며, @Bean 당 각각 하나씩 메타 정보가 생성된다.

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

  • AnnotationConfigApplicationContext 는 AnnotatedBeanDefinitionReader 를 사용해서 AppConfig.class 를 읽고 BeanDefinition 을 생성한다. 자바 코드를 설정정보처럼 읽음.

  • GenericXmlApplicationContext 는 XmlBeanDefinitionReader 를 사용해서 appConfig.xml 설정 정보를 읽고 BeanDefinition 을 생성한다.

  • 새로운 형식의 설정 정보가 추가되면, Xxx(임의)BeanDefinitionReader를 만들어서 BeanDefinition 을 생성하면 된다.

  • 스프링 빈을 등록하는 방법은 xml로 직접 등록하는 방법과 자바 코드를 통해 팩토리 빈으로 등록하는 방법 등이 있는데, 우리가 보통 자바 코드를 통해 빈을 등록하는 방법은 팩토리 빈을 통해 등록하는 것이다.

  • 다음처럼 beanDefinitionName을 통해 beanDefinition의 메타 정보를 확인할 수 있다.

정리

  • 결국 스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용하는 것을 이해하자
profile
하마드

0개의 댓글