SpringBoot嵌入SpringMVC原理分析

本文详细探讨了SpringBoot如何通过DispatcherServletAutoConfiguration自动配置并注册DispatcherServlet到ServletContext,包括配置类的作用、注册流程及Servlet3.0规范中的动态添加功能。
摘要由CSDN通过智能技术生成

承接上文。
在上一篇文章中,我们介绍到了SpringBoot是如何整合Tomcat的。我们知道在SpringBoot项目中可以使用SpringMVC的注解,比如@Controller和@RequestMapping注解。既然我们没有配置SpringMVC那么mvc的功能又是怎么起作用呢?

自动配置(一) 自动配置DispacherServlet和DispacherServletRegistration

首先找到SpringMVC的自动配置类

org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration

DispatcherServletAutoConfiguration.class

在这里插入图片描述
首先解释一下该类上的注解:根据行号来解释
1.@AutoConfigurationOrder:自动加载时配置该类的顺序
2.@Configuration:表示这是一个配置类
3.@ConditionalOnWebApplication:自动配置该类需要满足当前上下文环境是SERVLET环境
4.@ConditionalOnClass:classpath路径下需要存在DispacherServlet类
5.@AutoConfigureAfter: 在ServletWebServerFactoryAutoConfiguration后配置,这个ServletWebServerFactoryAutoConfiguation就是我们前面文章说的Tomcat的自动配置类

DispatcherServletAutoConfiguration类中有两个内部类分别是:DispatcherServletConfigurationDispatcherServletRegistrationConfiguration

DispacherServletConfiguration.class

@Configuration(proxyBeanMethods = false)
	@Conditional(DefaultDispatcherServletCondition.class)
	@ConditionalOnClass(ServletRegistration.class)
	@EnableConfigurationProperties({
    HttpProperties.class, WebMvcProperties.class })
	protected static class DispatcherServletConfiguration {
   

		@Bean(name = DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
		public DispatcherServlet dispatcherServlet(HttpProperties httpProperties, WebMvcProperties webMvcProperties) {
   
			DispatcherServlet dispatcherServlet = new DispatcherServlet();
			dispatcherServlet.setDispatchOptionsRequest(webMvcProperties.isDispatchOptionsRequest());
			dispatcherServlet.setDispatchTraceRequest(webMvcProperties.isDispatchTraceRequest());
			dispatcherServlet.setThrowExceptionIfNoHandlerFound(webMvcProperties.isThrowExceptionIfNoHandlerFound());
			dispatcherServlet.setPublishEvents(webMvcProperties.isPublishRequestHandledEvents());
			dispatcherServlet.setEnableLoggingRequestDetails(httpProperties.isLogRequestDetails());
			return dispatcherServlet;
		}
		
		// 这个类的主要作用是把用户自己配置的MultipartResolver的名称给配置一下
		// 因为用户自己配置的类名称可能不叫multipartResolver
		// 简单来说就是为了统一MultipartResolver在IOC容器中的bean名称叫 multipartResolver
		@Bean
		@ConditionalOnBean(MultipartResolver.class)
		@ConditionalOnMissingBean(name = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值