springboot 如何正确配置springmvc

Posted by hcy on August 25, 2020

springboot 如何正确配置springmvc

​ 虽然Springboot是开箱即用的,使用Springmvc也是十分简单,但是如何配置才是最好的呢?,看到很多人多它的用法不了解,本文讲一下它的用法。

将它之前,我们先了解下什么是Springmvc

Springmvc是基于servlet体系的开发框架,他由DispatcherServlet拦截请求,根据请求路径使用handlerMapper查找到能执行请求的handler,再由handlerAdapter执行handler

这其中又涉及到了如何映射?,如何解析参数?,如果处理返回值?,如果处理异常?,如果渲染页面?,等一系列问题,但是核心的操作就是下面三个。

  1. DispatcherServlet 实现了servlet接口,负责拦截请求

  2. handlerMapper 负责路由

  3. handlerAdapter 负责执行handler

所以Springboot的自动配置就是将上面的一系列类初始化好,再启动Tomcat,将servlet配置到tomcat里面。

1. WebMvcConfigurationSupport

​ 打开WebMvcConfigurationSupport类查看代码,我么上面讲到的Springmvc需要的组件全部在此类中定义,并且留了大量的钩子函数,供我们自定义,我们可以继承此类,重写其中的钩子函数,想要修改那部分就找到其中的钩子函数,可以完成定制。

​ 但是这种方式并不好,第一我们继承此类后,Springboot的自动配置就会失效,第二其他类如果想要定制Springmvc就不行了。

2.@EnableWebMvc注解

​ 查看该注解的源码其引入了DelegatingWebMvcConfiguration类,这是一个代理类,并且继承WebMvcConfigurationSupport,他能自动查找WebMvcConfigurer,同样能对Springmvc进行定制,并且不止我们自己能能提供WebMvcConfigurer,其他框架也能提供WebMvcConfigurer,多个WebMvcConfigurer可以共存。所以比上面的方法更好。查看WebMvcConfigurer里面的方法,和WebMvcConfigurationSupport非常相似的。

3. 直接实现WebMvcConfigurer接口

​ 查看WebMvcAutoConfiguration类,这是SpringbootSpringmvc的自动配置类,其中有一个子类EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration,所以即使我么不使用@EnableWebMvc注解,也可以实现配置,并且此类中内置了大量有用的配置。

如默认资源路径配置,OrderedHiddenHttpMethodFilterOrderedFormContentFilter等。

​ 由于继承了DelegatingWebMvcConfiguration,所以我们想要自定义可以直接实现WebMvcConfigurer接口。

上面三种方式都可以实现自定义Springmvc,第一种方式是强烈不推荐的,如果不想要WebMvcAutoConfiguration类内默认配置的那些东西,可以使用第二种方式,如果想要默认配置的东西,可以使用第三种方式,建议使用第三种方法,因为默认配置有不少有用的东西。

总结

​ 综上所述,配置Springmvc的最优雅方式就是实现WebMvcConfigurer接口,并让工厂扫描到,所有的自定义配置都通过钩子函数完成,不要使用@EnableWebMvc注解,更不要直接继承WebMvcConfigurationSupport类。

​ 另外SpringWebFlux的配置思路和Springmvc基本一致,有兴趣学习webflux的可以顺着mvc的思路思考。


转载请注明出处:https://www.huangchaoyu.com/2020/08/25/springboot-如何正确配置springmvc/