ApplicationContextInitializer

appti·2024년 3월 14일
0

분석

목록 보기
6/23

정의

ApplicationContextInitializer는 ApplicationContext 중 ConfigurableApplicationContext를 초기화하기 위해 사용되는 함수형 인터페이스입니다.

ApplicationContext refresh 작업 전, prepareContext() 과정에서 필요한 초기 설정을 프로그래밍 적으로 초기화를 수행합니다.

initialize(C)에 지정된 파라미터의 제네릭은 ConfigurableApplicationContext입니다.

최상위 ApplicationContext는 아니지만, ApplicationContext를 1 depth를 들어간 인터페이스이기 때문에 사실상 사용하는 AnnotationConfigServletWebServerApplicationContext나 AnnotationConfigReactiveWebServerApplicationContext를 모두 처리할 수 있다고 볼 수 있습니다.

SPI ApplicationContextInitializer

spring boot autoconfigurer 및 spring core의 META-INF/spring.factories에서 다음과 같이 SPI로 생성할 ApplicationContextInitializer를 확인할 수 있습니다.

ApplicationContextInitializer 호출 시점

ApplicationContext refresh 과정 중 SpringApplication.prepareRefresh()에 있는 applyInitailizers()에 의해 ApplicationContextIntializer를 호출하고 있음을 확인할 수 있습니다.

등록된 ApplicationContextInitializer

다음과 같이 SPI를 통해 등록한 7개의 ApplicationContextInitailizer가 동작하고 있음을 확인할 수 있습니다.

  • SharedMetadataReaderFactoryContextInitializer
    • 메타데이터 읽기 작업 최적화를 위한 MetadataReaderFactory를 ApplicationContext에 세팅합니다.
  • DelegatingApplicationContextInitializer
    • 다른 ApplicationContextInitializer를 세팅하고 순서대로 호출해 ApplicationContext를 초기화하는 기능을 제공합니다.
  • ContextldApplicationContextInitializer
    • ApplicationContext에 Unique ID를 할당합니다.
    • Context ID는 로깅, 모니터링, ApplicationContext 식별자로 사용합니다.
  • ConditionEvaluationReportLoggingListener
    • Condition의 결과를 저장해 로깅합니다.
  • ConfigurationWarningsApplicationContextInitializer
    • ApplicationContext에서 잘못된, 문제가 될 수 있는 Configuration 등을 로깅합니다.
  • RSocketPortInfoApplicationContextInitializer
    • RSocket 서버의 포트 정보를 ApplicationContext에 세팅합니다.
  • ServerPortInfoApplicationContextInitializer
    • (RSocket 서버가 아닌)일반적인 서버 포트 정보를 ApplicationContext에 세팅합니다.
profile
안녕하세요

0개의 댓글