Spring

[Spring] 스프링 컨테이너 (BeanFactory & ApplicationContext & BeanDefinition)

날아 2023. 1. 29. 14:19

1. BeanFactory

  • 스프링에서 제공하는 IoC 컨테이너
  • 스프링 컨테이너의 최상위 인터페이스이다.
  • 스프링빈을 관리, 조회한다.
  • getBean()을 제공한다

2. ApplicationContext

  • BeanFactory기능을 모두 상속받아서 제공
  • 빈을 관리하고 검색하는 기능 외에 수 많은 부가기능을 제공한다.

  • 메시지소스를 활용한 국제화 기능 -> ex) 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력
  • 환경변수 -> 로컬,개발,운영등을 구분해서 처리
  • 애플리케이션 이벤트 -> 이벤트를 발행하고 구독하는 모델을 편리하게 지원
  • 편리한 리소스 조회 -> 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회

 

빈 요청시 처리 과정

클라이언트에서 bean을 요청하면 ApplicationContext는 다음과 같은 과정을 거쳐 bean을 반환한다.

  1. ApplicationContext는 @Configuration이 붙은 클래스들을 설정 정보로 등록해두고, @Bean이 붙은 메소드의 이름으로 빈 목록을 생성한다. 
  2. 클라이언트가 해당 bean을 요청한다. 
  3. ApplicationContext는 자신의 bean 목록에서 요청한 이름이 있는지 찾는다.
  4. ApplicationContext는 설정 클래스로부터 bean 생성을 요청하고, 생성된 bean을 돌려준다. 

 

ApplicationContext의 장점 
  • 클라이언트는 @Configuration이 붙은 구체적인 팩토리 클래스를 알 필요가 없다.
  • ApplicationContext는 종합 IoC 서비스를 제공한다.
    • ApplicationContext는 객체의 생성과 관계설정 외에, 객체가 만들어지는 방식과 시점 및 전략등을 다르게 설정할 수 있고 후처리나 정보의 조합 인터셉트 등과 같은 다양한 기능을 제공한다. 
  • ApplicationContext를 통해 다양한 빈 검색 방법을 제공할 수 있다. 

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

스프링이 이렇게 다양한 설정 형식을 지원할 수 있는 데엔 'BeanDefinition'이라는 추상화가 있다.

  • @Bean(AppConfig.class), <bean>(appConfig.xml)당 각각 하나의 메타 정보가 생성된다.
  • 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다.

 

  • 'AnnotationConfigApplicationContext'는 'AnnotatedBeanDefinitionReader'를 사용해서 'AppConfig.class'를 읽고 'BeanDefinition'을 생성한다. 

 

 

출저

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

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