📅  最后修改于: 2021-01-11 05:46:45             🧑  作者: Mango
在本节中,我们将看到应用程序的后台功能:
什么是调度程序servlet?
谁在配置调度程序servlet?
调度程序servlet做什么?
HelloWorldBean对象如何转换为JSON?
谁在配置错误映射?
@SpringBootApplication (exclude={JacksonAutoConfiguration.class, JmxAutoConfiguration.class})
或在application.properties文件中添加以下语句。
spring.autoconfiguration.exclude=org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration
我们从自动配置中排除了类,以加快启动速度并提高应用程序性能。
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类。
在Spring MVC中,所有传入请求都通过单个Servlet进行处理,这称为Dispatcher Servlet(前端控制器) 。前端控制器是Web应用程序开发中的一种设计模式。单个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 。它创建默认的错误页面,称为Whitelabel Error Page 。
另一件事是自动配置的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的转换。