1. 程式人生 > >Spring web 啟動過程

Spring web 啟動過程

ade () 解析 文件解析 webapp cat 文件 什麽 sca

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 啟動過程