ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring - 스프링 서버 실행 흐름 및 설정 파일/어노테이션 실행 시점
    Spring 2024. 12. 23. 17:35
    반응형

    스프링 서버 실행 흐름 및 설정 파일/어노테이션 실행 시점

    1. 스프링 컨테이너 초기화

    스프링 서버는 애플리케이션 실행 시, SpringApplicationContext를 생성합니다. 이 컨텍스트는 스프링의 모든 빈(Bean)과 설정 파일을 로드하고 관리하는 핵심 역할을 합니다.

    • XML 기반 설정Java Config 클래스 모두 이 컨텍스트 초기화 과정에서 로드됩니다.
    • 스프링 컨테이너는 ApplicationContext를 기반으로 빈을 등록하고 DI(의존성 주입)를 처리합니다.

    2. XML 파일과 Java Config 파일 처리 순서

    (1) XML 파일 처리

    • 스프링 컨테이너 초기화 중, 먼저 context-datasource.xml과 같은 XML 파일을 로드합니다.
    • XML 파일은 <bean> 태그를 통해 정의된 빈을 등록하고, 필요한 경우 초기화 메서드를 호출합니다.
    • 이 과정에서 데이터베이스와 연결된 DataSource와 같은 기본적인 빈이 등록됩니다.

    (2) Java Config 클래스 처리

    • XML 파일이 로드된 이후, @Configuration이 선언된 Java Config 파일이 처리됩니다.
    • 스프링 컨테이너는 @Configuration 어노테이션을 스캔하여 해당 클래스 내의 @Bean 메서드를 호출하고, 빈을 등록합니다.
    • 이 단계에서 Java Config 파일에서 XML로 정의된 빈(@Qualifier로 주입된 DataSource 등)을 사용하여 추가적인 빈(e.g., SqlSessionFactory, TransactionManager)을 생성합니다.

    3. 어노테이션 실행 순서

    (1) @ImportResource

    • Java Config 클래스에 선언된 @ImportResource는 스프링이 XML 파일을 로드하도록 지시합니다.
    • 이 어노테이션은 스프링 컨테이너 초기화 단계에서 실행됩니다. 즉, 컨테이너는 먼저 XML 파일을 읽고, 필요한 빈을 등록합니다.
    • @ImportResource로 지정한 XML 파일의 <bean> 정의는 이후 Java Config 클래스에서 주입됩니다.

    (2) @MapperScan

    • @MapperScan은 MyBatis 매퍼 인터페이스를 스캔하고, 특정 SqlSessionFactory와 연결합니다.
    • 이 어노테이션은 XML 파일과 Java Config 클래스에서 등록된 SqlSessionFactory 빈이 모두 준비된 실행됩니다.
    • 이 과정에서 스캔된 매퍼와 SqlSessionFactory 간의 연결이 이루어집니다.

    (3) @Bean

    • Java Config 클래스에서 @Bean 메서드는 XML 또는 다른 @Bean으로 등록된 빈을 참조하여 새로운 빈을 생성합니다.
    • @Bean 메서드 호출 순서는 의존 관계에 따라 스프링 컨테이너가 자동으로 결정합니다.

    (4) @Autowired 및 @Qualifier

    • 모든 빈이 컨테이너에 등록된 후, 의존성 주입이 이루어집니다.
    • @Autowired는 컨테이너에 등록된 빈을 자동으로 주입하며, @Qualifier는 주입할 빈을 명시적으로 지정합니다.
    • 이 단계는 애플리케이션 컨텍스트가 거의 초기화된 마지막 단계에서 실행됩니다.

    실행 흐름 요약

    1. 스프링 애플리케이션 컨텍스트 초기화 시작
      • XML 파일이 먼저 읽혀지고, <bean> 태그로 정의된 빈이 등록됩니다.
      • XML 파일의 DataSource 같은 기본 설정이 우선적으로 처리됩니다.
    2. Java Config 클래스 처리
      • @Configuration 클래스가 처리되며, @Bean 메서드가 호출됩니다.
      • @ImportResource로 XML에 정의된 빈을 가져오고, 이를 활용해 추가 빈(e.g., SqlSessionFactory)을 생성합니다.
    3. @MapperScan 및 매퍼 스캔
      • 등록된 SqlSessionFactory와 매퍼 인터페이스를 연결합니다.
    4. 의존성 주입
      • 모든 빈이 등록된 후, @Autowired와 같은 어노테이션을 통해 의존성 주입이 수행됩니다.
    5. 애플리케이션 컨텍스트 초기화 완료
      • 모든 설정과 빈 등록이 완료되면 스프링 서버가 준비됩니다.
    반응형

    댓글

Designed by Tistory.