[퍼비톡] 스프링 부트 동작 원리 - Application Context

Song Chae Won·2023년 9월 19일

퍼비톡

목록 보기
2/10
post-thumbnail

BeanFactory or ApplicationContext?

BeanFactory

org.springframework.beans.factory
스프링 컨테이너의 최상위 인터페이스
스프링 빈을 관리하고 조회하는 역할

“두 컨테이너 중 특별한 이유가 없다면 ApplicationContext를 사용하라"
WHY??? “빈 관리, 조회하는 기능 외에 수많은 부가 기능"

ApplicationContext

org.springframework.context
더 고급 생명주기 관리 기능을 제공

객체의 생성과 관계 설정이 다가 아니다
객체가 만들어지는 방식 or 시점 or 전략 등을 다르게
후처리나 정보의 조합 인터셉트 등과 같은 다양한 기능이 존재

Bean Autowiring

스프링 컨테이너는 빈들 간의 의존성을 자동으로 연결(autowire)할 수 있다.
각 bean 별로 지정 가능

BeanFactory -> XML로만 가능, Lazy Loading(지연 로딩)
ApplicationContext -> 어노테이션 지원, Eager Loading(즉시 로딩)

Bean 생성/로딩 시점
Application Context -> 기본적으로 Eager Loading (즉시 로딩)
➡️ 설정이나 주변 환경의 오류를 즉시 발견할 수 있기 때문 !

BeanFactoryPostProcessor / BeanPostProcessor 자동 등록

BeanFactoryPostProcessor ➡️ 빈에 대한 조작을 하기도 시작하기 전에
빈 설정정보(BeanDefinition)를 불러오고 조작하는 것
BeanPostProcessor ➡️ 빈이 초기화되는 시점(전,후)에서 부가적인 작업

BeanFactoryPostProcessor

실제 빈들이 생성되기 전에 빈의 정의나 설정 메타데이터에 작동
런타임 의존성을 해결하기 위해 호출
postProcessBeanFactoy(ConfigurableListableBeanFactory beanFactory) 메서드를 구현해서 사용

BeanPostProcessor

모든 빈들이 만들어진 직후에 객체의 내용이나 객체 자체를 변경하기 위한 것

2가지 메소드 제공
1) postProcessBeforeInitialization(초기화 전) 메소드
2) postProcessAfterInitialization(초기화 후) 메소드

SpringBootApplication.run() 실행과정

  1. StopWatch로 실행 시간 측정
  2. BootStrapContext 생성
    환경 변수들을 관리하는 스프링의 Environment 객체를 후처리하기 위한 임시 컨텍스트
  3. Java AWT Headless Property 설정
  4. SpringApplicationRunListener 조회 및 Starting 처리
  5. Arguments 래핑 및 Environment 준비
  6. IgnoreBeanInfo 설정
  7. 배너 출력
  8. 애플리케이션 컨텍스트 생성
  9. Context 준비 단계 - prepareContext
  10. Context Refresh 단계 refreshContext
  11. Context Refresh 후처리
  12. 실행 시간 출력 및 리스너 구독 시작
  13. Runners 실행
profile
@chhaewxn

0개의 댓글