스프링 컨테이너

jungnoeun·2022년 8월 22일
0

spring

목록 보기
4/24

스프링 컨테이너 생성

스프링 컨테이너가 생성되는 과정

//스프링 컨테이너 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
  • ApplicationContext 은 인터페이스이므로 다형성이 적용이 되어있다.
  • AnnotationConfigApplicationContextApplicationContext 의 구현체 중 하나이다.
  • AnnotationConfigApplicationContextAnnotationConfig 설정을 기반으로 ApplicationContext (스프링)을 만드는 것이다.





스프링 컨테이너 생성

new AnnotationConfigApplicationContext(AppConfig.class);을 통해서 AppConfig.class를 설정정보로 하여 스프링 컨테이너가 생성된다.


스프링 빈 등록

설정정보(AppConfig.class)를 보고 스프링 컨테이너의 스프링 빈 저장소에 빈이름&빈객체를 key&value 형태로 등록해준다.


스프링 빈 의존관계설정 -준비

빈 요청이 들어오면 BeanDefinition에 등록된 빈 정보들을 보고 필요한 빈 객체들을 만든다.


스프링 빈 의존관계설정- 완료

설정정보(AppConfig.class)를 참고하여 빈들 사이의 의존관계 설정을 해준다.







BeanFactory와 ApplicationContext


### BeanFactory
  • 스프링 컨테이너의 최상위 인터페이스
  • 스프링 빈을 관리하고 조회하는 역할 담당
  • getBean() 을 제공

ApplicationContext

  • BeanFactory 기능을 모두 상속받아서 제공
  • 앱을 개발하고 빈을 관리하고 조회하는 기능은 물론이고 많은 부가기능 보유
  • 스프링 컨테이너

정리

  • ApplicationContextBeanFactory 의 기능을 상속받는다.
  • ApplicationContext 은 빈 관리기능 + 편리한 부가기능을 제공한다.
  • BeanFactoryApplicationContext 를 스프링 컨테이너라 한다.




스프링 빈을 만드는 방법

  1. 팩토리 빈을 통해 등록
    AppConfig.java와 같은 팩토리 메서드에서 메서드를 조작해서 스프링 빈을 등록한다.
    @Bean이 이 방법에 포함
  2. XML을 사용해서 직접 등록
    <Bean id=”” class=””></Bean> 를 이용해 직접 스프링 빈을 등록







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

스프링은 어떻게 다양한 설정 형식(java, xml등)을 지원하는 것일까?
그 중심에는 BeanDefinition 이라는 추상화가 있다.
이는 역할과 구현을 개념적으로 나눈 것이다.

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

AnnotationConfigApplicationContextAnnotatedBeanDefinitionReader 를 사용해서
AppConfig.class 를 읽고 BeanDefinition 을 생성한다.

BeanDefinition에 빈의 이름을 비롯한 빈의 메타정보를 담는다.

profile
개발자

0개의 댓글