返回

从Spring 5源代码揭开Spring MVC的启动入口及流程

后端

  1. Spring MVC 的启动入口

Spring MVC 的启动入口是 ContextLoaderListener,它是 Spring 框架提供的一个 ServletContextListener。当 Web 应用程序启动时,它将被自动加载到容器中,并执行其 contextInitialized() 方法。

在 contextInitialized() 方法中,ContextLoaderListener 会执行以下步骤:

  1. 创建一个 Spring 应用程序上下文,并加载 Spring 配置文件中的 bean 定义。
  2. 刷新 Spring 应用程序上下文,这将初始化所有 bean,并使它们可以被使用。
  3. 将 Spring 应用程序上下文存储在 Servlet 上下文中,以便其他组件可以使用它。

2. DispatcherServlet 的入口

DispatcherServlet 是 Spring MVC 的核心组件之一,它是处理 Web 请求的控制器。它也是一个 Servlet,在 Web 应用程序启动时会被自动加载到容器中,并执行其 init() 方法。

在 init() 方法中,DispatcherServlet 会执行以下步骤:

  1. 创建一个 Spring Web 应用程序上下文,并加载 Spring MVC 配置文件中的 bean 定义。
  2. 刷新 Spring Web 应用程序上下文,这将初始化所有 bean,并使它们可以被使用。
  3. 将 Spring Web 应用程序上下文存储在 Servlet 上下文中,以便其他组件可以使用它。
  4. 注册一个 RequestMappingHandlerMapping bean,这个 bean 将负责将请求映射到控制器方法。
  5. 注册一个 HandlerAdapter bean,这个 bean 将负责将请求映射到控制器方法。
  6. 注册一个 ViewResolver bean,这个 bean 将负责将控制器方法的返回值解析成视图。

3. 容器刷新过程

在 Spring MVC 的启动过程中,父子容器都会经历一个容器刷新过程。

3.1 ContextLoaderListener 的容器刷新过程

ContextLoaderListener 的容器刷新过程如下:

  1. 创建一个 Spring 应用程序上下文,并加载 Spring 配置文件中的 bean 定义。
  2. 刷新 Spring 应用程序上下文,这将初始化所有 bean,并使它们可以被使用。

3.2 DispatcherServlet 的容器刷新过程

DispatcherServlet 的容器刷新过程如下:

  1. 创建一个 Spring Web 应用程序上下文,并加载 Spring MVC 配置文件中的 bean 定义。
  2. 刷新 Spring Web 应用程序上下文,这将初始化所有 bean,并使它们可以被使用。

4. 总结

Spring MVC 的启动入口是 ContextLoaderListener,它是 Spring 框架提供的一个 ServletContextListener。ContextLoaderListener 会负责创建 Spring 应用程序上下文,并加载 Spring 配置文件中的 bean 定义。DispatcherServlet 是 Spring MVC 的核心组件之一,它是处理 Web 请求的控制器。DispatcherServlet 会负责创建 Spring Web 应用程序上下文,并加载 Spring MVC 配置文件中的 bean 定义。父子容器都会经历一个容器刷新过程,这个过程会初始化所有 bean,并使它们可以被使用。