本文概述
在本节中, 我们将看到应用程序的后台功能:
什么是调度程序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接收所有请求, 并将它们传输到应用程序的所有其他组件。
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。它创建默认的错误页面, 称为白色标签错误页面。
另一件事是自动配置的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的转换。
评论前必须登录!
注册