-
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는 주입할 빈을 명시적으로 지정합니다.
- 이 단계는 애플리케이션 컨텍스트가 거의 초기화된 마지막 단계에서 실행됩니다.
실행 흐름 요약
- 스프링 애플리케이션 컨텍스트 초기화 시작
- XML 파일이 먼저 읽혀지고, <bean> 태그로 정의된 빈이 등록됩니다.
- XML 파일의 DataSource 같은 기본 설정이 우선적으로 처리됩니다.
- Java Config 클래스 처리
- @Configuration 클래스가 처리되며, @Bean 메서드가 호출됩니다.
- @ImportResource로 XML에 정의된 빈을 가져오고, 이를 활용해 추가 빈(e.g., SqlSessionFactory)을 생성합니다.
- @MapperScan 및 매퍼 스캔
- 등록된 SqlSessionFactory와 매퍼 인터페이스를 연결합니다.
- 의존성 주입
- 모든 빈이 등록된 후, @Autowired와 같은 어노테이션을 통해 의존성 주입이 수행됩니다.
- 애플리케이션 컨텍스트 초기화 완료
- 모든 설정과 빈 등록이 완료되면 스프링 서버가 준비됩니다.
반응형'Spring' 카테고리의 다른 글
Spring - logback 패키지별 분리하여 설정하기 (0) 2025.01.08 Spring - LogBack설정 (0) 2025.01.08 Spring MVC - <mvc:interceptors> 사용법 및 설명 (0) 2024.12.12 Vo 와 Dao 차이점 파헤치기 (0) 2024.12.03 초간단 SpringBoot DB데이터 Excel 다운로드 (0) 2024.10.25