출처
Spring이 XmlBeanDefinitionReader에게 bean을 읽어오기 위한 과정
1. 스프링 컨텍스트가 생성되면서 refresh를 명령.
2. ApplicationContext가 설정들을 다시 뒤지기 시작.
3. 최하위 ApplicationContext부터 자신이 해야할 refresh동작을 처리 한뒤 상위 refresh 호출.
4. 언젠가 AbstractApplicationContext까지 refresh명령 도달
5. AbstractApplicationContext가 invokeBeanFactoryPostProcessors메소드 호출.
6. invokeBeanFactoryPostProcessors에서 PostProcessorRegistrationDelegate라는 딜리게이트에게 빈 등록을 위임.
7. 이 딜리게이트는 BeanFactoryPostProcessor 리스트 작성.
7-1. BeanFactoryPostProcessor는 BeanPostProcessor와 같이 빈 등록에 관여함
8. BeanPostProcessor에 BeanDefinitionRegistry를 넘겨주면서 BeanFactoryPostProcessor의
postProcessBeanDefinitionRegistry() 메소드로 넘어감.
8-1. Spring Boot의 경우 BeanPostProcessor는 ConfigurationClassPostProcessor로 되어있음.
8-2. 여기서 호출된 postProcessBeanDefinitionRegistry메소드에서는 파라미터로 넘어온 BeanDefinition정보를 BeanDefinition정보를 BeanDefinitionHolder로 바꾸는 작업을 먼저 진행.
8-3. 그 후 ConfigurationClassBeanDefinitionReader를 통해 BeanDefinition을 읽도록 처리를 진행.
8-4. ConfigurationClassBeanDefinitionReader에서 BeanDefinitionReader를 고르는 작업을 진행하는데 groovy 또는 xml만 받음.
9. xml 설정의 경우 XmlBeanDefinitionReader가 생성, 결국 XmlBeanDefinitionReader의 loadBeanDefinitions 호출
10. XmlBeanDefinitionReader에서는 loadBeanDefinitios 메소드가 호출됨으로 시작함.
11. Resource타입으로 받은 파라미터를 기준으로 doLoadBeanDefinitions가 호출될 때까지 Resource를 가공.
12. doLoadBeanDefinitions에서 xml을 파싱하기 위해 Document로 만들어 registerBeanDefinitios로 넘기고 BeanDefinitionDocumentReader를 통해 빈 등록 진행
'spring' 카테고리의 다른 글
| 웹 어플리케이션 보안 (0) | 2020.10.04 |
|---|---|
| web.xml (0) | 2020.10.04 |
| mybatis 연동 (0) | 2020.10.04 |
| Spring Dispatcher (1) | 2020.10.04 |
| 스프링에서 Gson을 이용하여 ajax 응답하기 (0) | 2020.10.04 |