Spring Boot 自动配置和 Dispatcher Servlet

17 Jan 2025 | 3 分钟阅读

在本节中,我们将看到应用程序的后台功能

什么是 dispatcher servlet?

谁在配置 dispatcher servlet?

dispatcher servlet 做什么?

HelloWorldBean 对象如何转换为 JSON?

谁在配置错误映射?

Spring Boot 自动配置

  • Spring Boot 根据 classpath 中是否存在 jar 包、bean、属性等,自动配置 Spring 应用程序。
  • 由于无需定义包含在自动配置类中的某些 bean,因此可以更轻松、更快速地进行开发。
  • 一个典型的 MVC 数据库驱动的 Spring MVC 应用程序需要大量的配置,例如 **dispatcher servlet、视图解析器、Jackson、数据源、事务管理器** 等等。
    • 如果 **Spring MVC jar** 在 classpath 中,Spring Boot 会自动配置一个 **Dispatcher Servlet**。
    • 如果 **Jackson jar** 在 classpath 中,则自动配置 **Jackson**。
    • 如果 **Hibernate jar** 在 classpath 中,则自动配置一个 **Data Source**。
  • 可以通过在启动类中添加 **@SpringBootApplication** 或 **@EnableAutoConfiguration** 注解来启用自动配置。 它表明它是一个 Spring 上下文文件。
  • 它启用了一种叫做 **自动配置** 的功能。
  • 它启用了一种叫做 **组件扫描** 的功能。 这是 Spring 的特性,它将自动开始扫描包和子包中的类以查找任何 bean 文件。
  • 以下是 Spring Boot 完成的一些自动配置示例
    • DispatcherServletAutoConfiguration
    • DataSourceAutoConfiguration
    • JacksonAutoConfiguration
    • **ErrorMvcAutoConfiguration** (#basicErrorController)
  • 我们可以在 **AUTO-CONFIGURATION REPORT** 或 **CONDITIONS EVALUATION REPORT** 中看到 Spring Boot 完成的自动配置。
  • 可以通过添加以下内容从自动配置中 **排除** 类

或者在 **application.properties** 文件中添加以下语句。

我们从自动配置中排除类是为了 **更快的启动** 和 **更好的应用程序性能**。

  • 通过启用 **debug** 模式生成的 AUTO-CONFIGURATION REPORT。 打开 **application.properties** 文件并添加以下语句

运行 RestfulWebServiceApplication.java 文件。 它在 CONDITIONS EVALUATION REPORT 下显示 Positive matches、Negative matches、Exclusions 和 Unconditional classes。

报告中有很多信息,因此不可能显示所有详细信息。 如果我们向下滚动报告并仔细查看自动配置日志,我们会发现 **DispatcherServletAutoConfiguration matched**。

这是因为依赖项 **spring-boot-starter-web** 依赖于 **spring-webmvc** 依赖项。 因此,我们在 classpath 中获得了 DispatcherServlet 类。

Dispatcher Servlet

在 Spring MVC 中,所有传入的请求都通过一个称为 **Dispatcher Servlet (前端控制器)** 的 servlet。 前端控制器是 Web 应用程序开发中的一种设计模式。 单个 servlet 接收所有请求并将它们传输到应用程序的所有其他组件。

Spring Boot Auto Configuration and Dispatcher Servlet

DispatcherServlet 的工作是接受传入的 URI 并找到 **处理程序**(Controller 类)和 **视图**(通常是 JSP)的正确组合。 当 DispatcherServlet 确定视图时,它会将其呈现为响应。 最后,DispatcherServlet 将 Response 对象返回给客户端。 简而言之,Dispatcher Servlet 扮演着关键的角色。

另一件需要注意的是 ErrorMvcAutoConfiguration

它配置了 **basicErrorController、errorAttributes、ErrorMvcAutoConfiguration** 和 **DefaultErrorViewResolverConfiguration**。 它创建了默认的错误页面,称为 **Whitelabel Error Page**。

Spring Boot Auto Configuration and Dispatcher Servlet

另一个自动配置的内容是 **HttpMessageConvertersAutoConfiguration**。 这些消息转换器会自动转换消息。

它初始化 Jackson bean 和消息转换器。 **Jackson2ObjectMapper** 执行从 **bean 到 JSON** 和 **JSON 到 bean** 的转换。