个性化阅读
专注于IT技术分析

Spring Boot自动配置和分派器Servlet

本文概述

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

什么是调度程序servlet?

谁在配置调度程序servlet?

调度程序servlet做什么?

HelloWorldBean对象如何转换为JSON?

谁在配置错误映射?

Spring Boot自动配置

  • Spring Boot根据在类路径中存在或不存在的依赖项(例如jar, bean, 属性等)自动配置spring应用程序。
  • 由于无需定义自动配置类中包含的某些Bean, 因此它使开发更加轻松和快捷。
  • 典型的MVC数据库驱动的Spring MVC应用程序需要大量配置, 例如调度程序servlet, 视图解析器, Jackson, 数据源, 事务管理器等。如果Spring MVC jar位于类路径中, 则Spring Boot会自动配置Dispatcher Servlet。如果Jackson罐子在类路径中, 则自动配置Jackson。如果Hibernate jar在类路径中, 则自动配置数据源。
  • 可以通过在启动类中添加@SpringBootApplication或@EnableAutoConfiguration注释来启用自动配置。它指示它是一个Spring上下文文件。
  • 它启用了称为自动配置的功能。
  • 它启用了称为组件扫描的功能。这是Spring的功能, 它将开始自动扫描软件包和子软件包中的类以查找任何bean文件。
  • Spring Boot完成了一些自动配置的示例:DispatcherServletAutoConfiguration DataSourceAutoConfiguration JacksonAutoConfiguration ErrorMvcAutoConfiguration(#basicErrorController)
  • 我们可以在AUTO-CONFIGURATION REPORT或CONDITIONS EVALUATION REPORT中看到Spring Boot完成的自动配置。
  • 通过添加以下内容, 可以从自动配置中排除类:
@SpringBootApplication (exclude={JacksonAutoConfiguration.class, JmxAutoConfiguration.class})

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

spring.autoconfiguration.exclude=org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration

我们从自动配置中排除了类, 以加快启动速度并提高应用程序性能。

  • 通过启用调试模式生成的自动配置报告。打开application.properties文件, 并添加以下语句:
logging.level.org.springframework=debug

运行RestfulWebServiceApplication.java文件。它显示了条件评估报告下的肯定匹配, 否定匹配, 排除和无条件类。

-----------------------------------------------
CONDITIONS EVALUATION REPORT
-----------------------------------------------
Positive matches:
----------------------
ActiveMQAutoConfiguration matched:
- @ConditionalOnClass found required classes 'javax.jms.ConnectionFactory', 'org.apache.activemq.ActiveMQConnectionFactory' (OnClassCondition)
- @ConditionalOnMissingBean (types: javax.jms.ConnectionFactory; SearchStrategy: all) did not find any beans (OnBeanCondition)
------------------
------------------
------------------
Negative matches:
-------------------------
ActiveMQConnectionFactoryConfiguration.PooledConnectionFactoryConfiguration: Did not match:
-@ConditionalOnClass did not find required classes 'org.messaginghub.pooled.jms.JmsPoolConnectionFactory', 'org.apache.commons.pool2.PooledObject' (OnClassCondition)
----------------
----------------
----------------
Exclusions:
---------------
None
Unconditional classes:
-----------------------------    org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration

报告内有很多信息, 因此无法显示所有详细信息。如果向下滚动报表并仔细查看自动配置日志, 则会发现DispatcherServletAutoConfiguration匹配。

DispatcherServletAutoConfiguration matched:
-@ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
- found 'session' scope (OnWebApplicationCondition)

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

分派器Servlet

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

Spring Boot自动配置和分派器Servlet

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

要注意的另一件事是ErrorMvcAutoConfiguration:

ErrorMvcAutoConfiguration matched:
-@ConditionalOnClass found required classes 'javax.servlet.Servlet', 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)- found 'session' scope (OnWebApplicatiossssnCondition)

它配置basicErrorController, errorAttributes, ErrorMvcAutoConfiguration和DefaultErrorViewResolverConfiguration。它创建默认的错误页面, 称为白色标签错误页面。

Spring Boot自动配置和分派器Servlet

另一件事是自动配置的HttpMessageConvertersAutoConfiguration。这些消息转换器自动转换消息。

HttpMessageConvertersAutoConfiguration matched:
-@ConditionalOnClass found required class 'org.springframework.http.converter.HttpMessageConverter' (OnClassCondition)
----------------
-----------------
JacksonAutoConfiguration.Jackson2ObjectMapperBuilderCustomizerConfiguration matched: - @ConditionalOnClass found required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder'(OnClassCondition)

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


赞(0)
未经允许不得转载:srcmini » Spring Boot自动配置和分派器Servlet

评论 抢沙发

评论前必须登录!