传统Spring应用程序的启动过程

一 Spring应用程序的启动过程,本质上是ioc容器的启动过程:

(1)创建ioc容器实例(ApplicationContext、BeanFactory)

(2)读取配置文件或配置类、解析配置信息、注册Bean定义

(3)完成Bean的实例化、初始化

(4)ioc容器就绪、关闭

二 传统Spring web应用程序的启动过程

web程序,有一个核心配置文件web.xml,一般有以下核心配置。

  <!--spring资源上下文定义,在指定地址找到spring的xml配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/application_context.xml</param-value>
    </context-param>
<!--spring的上下文监听器-->
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
<!--dispatcherServlet的配置,这个servlet主要用于前端控制,这是springMVC的基础-->
    <servlet>
        <servlet-name>service_dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/services/service_dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

Spring Web程序的启动过程,本质上是ServletContext容器的启动过程:

  1. 读取web.xml文件

  2. 创建ServletConext实例

  3. 完成WebApplicationContext的创建和初始化

  4. 将WebApplicationContext放入ServletContext

  5. 初始化web.xml文件中配置的servlet

源码解读,建议从ContextLoaderListener.java类的ContextInitialized方法开始。

详细过程解读:在web.xml文件中配置了spring的上下文监听器,在web容器(如tomcat)启动时,会触发容器初始化事件。ContextLoaderListener监听到这个事件后,触发ContextInitialized方法完成上下文初始化,这个方法调用父类中ContextLoader的方法(createWebApplicationContext、configureAndRefreshWebApplicationContext)与setAttribute完成上下文初始化。ServletContext初始化完成后,开始初始化servlet。

ContextLoader类中主要完成三件事:

  • 通过createWebApplicationContext方法创建WebApplicationContext

  • 通过configureAndRefreshWebApplicationContext方法完成读取配置文件、Bean的实例化与初始化,、WebApplicationContext的初始化

  • 通过setAttribute完成ServletContext的初始化。

参考链接

posted @ 2024-08-20 18:23  抒写  阅读(5)  评论(0编辑  收藏  举报