从Spring 5源代码揭开Spring MVC的启动入口及流程
2024-02-24 11:26:13
- Spring MVC 的启动入口
Spring MVC 的启动入口是 ContextLoaderListener,它是 Spring 框架提供的一个 ServletContextListener。当 Web 应用程序启动时,它将被自动加载到容器中,并执行其 contextInitialized() 方法。
在 contextInitialized() 方法中,ContextLoaderListener 会执行以下步骤:
- 创建一个 Spring 应用程序上下文,并加载 Spring 配置文件中的 bean 定义。
- 刷新 Spring 应用程序上下文,这将初始化所有 bean,并使它们可以被使用。
- 将 Spring 应用程序上下文存储在 Servlet 上下文中,以便其他组件可以使用它。
2. DispatcherServlet 的入口
DispatcherServlet 是 Spring MVC 的核心组件之一,它是处理 Web 请求的控制器。它也是一个 Servlet,在 Web 应用程序启动时会被自动加载到容器中,并执行其 init() 方法。
在 init() 方法中,DispatcherServlet 会执行以下步骤:
- 创建一个 Spring Web 应用程序上下文,并加载 Spring MVC 配置文件中的 bean 定义。
- 刷新 Spring Web 应用程序上下文,这将初始化所有 bean,并使它们可以被使用。
- 将 Spring Web 应用程序上下文存储在 Servlet 上下文中,以便其他组件可以使用它。
- 注册一个 RequestMappingHandlerMapping bean,这个 bean 将负责将请求映射到控制器方法。
- 注册一个 HandlerAdapter bean,这个 bean 将负责将请求映射到控制器方法。
- 注册一个 ViewResolver bean,这个 bean 将负责将控制器方法的返回值解析成视图。
3. 容器刷新过程
在 Spring MVC 的启动过程中,父子容器都会经历一个容器刷新过程。
3.1 ContextLoaderListener 的容器刷新过程
ContextLoaderListener 的容器刷新过程如下:
- 创建一个 Spring 应用程序上下文,并加载 Spring 配置文件中的 bean 定义。
- 刷新 Spring 应用程序上下文,这将初始化所有 bean,并使它们可以被使用。
3.2 DispatcherServlet 的容器刷新过程
DispatcherServlet 的容器刷新过程如下:
- 创建一个 Spring Web 应用程序上下文,并加载 Spring MVC 配置文件中的 bean 定义。
- 刷新 Spring Web 应用程序上下文,这将初始化所有 bean,并使它们可以被使用。
4. 总结
Spring MVC 的启动入口是 ContextLoaderListener,它是 Spring 框架提供的一个 ServletContextListener。ContextLoaderListener 会负责创建 Spring 应用程序上下文,并加载 Spring 配置文件中的 bean 定义。DispatcherServlet 是 Spring MVC 的核心组件之一,它是处理 Web 请求的控制器。DispatcherServlet 会负责创建 Spring Web 应用程序上下文,并加载 Spring MVC 配置文件中的 bean 定义。父子容器都会经历一个容器刷新过程,这个过程会初始化所有 bean,并使它们可以被使用。