springboot 如何正确配置springmvc
springboot 如何正确配置springmvc
虽然Springboot是开箱即用的,使用Springmvc也是十分简单,但是如何配置才是最好的呢?,看到很多人多它的用法不了解,本文讲一下它的用法。
将它之前,我们先了解下什么是Springmvc。
Springmvc是基于servlet体系的开发框架,他由DispatcherServlet拦截请求,根据请求路径使用handlerMapper查找到能执行请求的handler,再由handlerAdapter执行handler。
这其中又涉及到了如何映射?,如何解析参数?,如果处理返回值?,如果处理异常?,如果渲染页面?,等一系列问题,但是核心的操作就是下面三个。
DispatcherServlet实现了servlet接口,负责拦截请求handlerMapper负责路由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类,这是Springboot对Springmvc的自动配置类,其中有一个子类EnableWebMvcConfiguration extends DelegatingWebMvcConfiguration,所以即使我么不使用@EnableWebMvc注解,也可以实现配置,并且此类中内置了大量有用的配置。
如默认资源路径配置,OrderedHiddenHttpMethodFilter,OrderedFormContentFilter等。
由于继承了DelegatingWebMvcConfiguration,所以我们想要自定义可以直接实现WebMvcConfigurer接口。
上面三种方式都可以实现自定义Springmvc,第一种方式是强烈不推荐的,如果不想要WebMvcAutoConfiguration类内默认配置的那些东西,可以使用第二种方式,如果想要默认配置的东西,可以使用第三种方式,建议使用第三种方法,因为默认配置有不少有用的东西。
总结
综上所述,配置Springmvc的最优雅方式就是实现WebMvcConfigurer接口,并让工厂扫描到,所有的自定义配置都通过钩子函数完成,不要使用@EnableWebMvc注解,更不要直接继承WebMvcConfigurationSupport类。
另外SpringWebFlux的配置思路和Springmvc基本一致,有兴趣学习webflux的可以顺着mvc的思路思考。