Spring web 啟動過程
Spring啟動過程經常在面試中會被問到,下面來梳理下Spring啟動到底在幹什麽。
首先要知道啟動的入口:
初始化上下文(WebApplicationContext),和配置文件相關常用到的上下文實現有:
1、ClassPathXmlApplicationContext
2、FileSystemXmlApplicationContext
3、XmlWebApplicationContext(默認)
這兩種都是通過一個spring配置文件來初始化上下文,通常web工程會使用一個繼承了ContextLoaderListener監聽器來啟動Spring上下文的配置。
1、通過ServletContext(如果Tomcat的StandardContext) 生成一個ApplicationContext (使用XmlWebApplicationContext,反射使用newInstance)
2、配置和刷新上下文(主要工作都在這裏面做)
a、獲取配置文件
b、配置上下文刷新
A、準備工作
B、創建BeanFactory(DefaultListableBeanFactory)
1、new 一個DefaultListableBeanFactory
2、加載Bean
a、new 一個reader用來讀配置文件 XmlBeanDefinitionReader
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:/spring-**.xml</param-value>
</context-param>
b、加載配置文件,和配置文件中的bean(到此我們定義的bean已經是BeanDefinition對象)
1、將配置文件讀為輸入流
2、將配置文件解析為Document
3、分析節點,根據節點獲取不同的解析策略
4、根據解析策略解析節點(包括我們常用的掃描包中的bean文件)
C、設置beanFactory的一些參數
D、獲取beanFactory的postProcessor()
1、比如配置了MapperScannerConfigurer則掃描Mapper和dao (根據ClassLoader查找配置目錄的資源)
E、加載所有的beanPostProcessor
F、實例所有非延遲初始化的bean (一般都是使用默認構造方法反射生成)
到此spring上下文已經初始完成。
Spring web 啟動過程