springboot 为 spring mvc 提供的自动配置及对自动配置的一些自定义定制(大体思路)
★ Spring Boot主流支持两个MVC框架:
Spring MVC(基于Servlet)
Spring WebFlux(基于Reactive,属于响应式API)
★ Spring Boot为Spring MVC提供了哪些自动配置
Spring MVC的自动配置主要由WebMvcAutoConfiguration自动配置类负责提供支持。
Spring Boot为Spring MVC自动配置大致提供了如下功能:
- 引入了ContentNegotiatingViewResolver和BeanNameViewResolver。
(两个典型的视图解析器:负责将String类型的逻辑视图名解析成实际View对象)
- 对服务器静态资源提供支持,包括对WebJars的支持。
- 自动注册 Converter、GenericConverter、Formatter这些Bean。
(类型转换、格式化器)
- 支持使用HttpMessageConverters来注册HttpMessageConverter。
HttpMessageConverter它主要负责完成String类型的请求参数与JSON数据、XML数据之间的相互转换。
HttpMessageConverter最常用的实现是基于Jackson或Jackson XML
- 自动注册 MessageCodeResolver。
- 支持静态的index.html首页。
- 自定义Favicon支持。用于为应用指定图标
- ConfigurableWebBindingInitializer Bean的自动使用。
上面这些内容,基本上就是Spring MVC开发时所需的各种基础Bean,因此Spring Boot为Spring MVC提供大量的自动配置。
★ 对自动配置进行定制
如果觉得springboot对spring mvc 的一些自动配置不满意,我们还可以对这些自动配置进行定制。
▲ 定制方式一:
若要在保留自动配置的基础上增加一些自定义的Spring MVC配置(例如添加拦截器、格式化器、视图控制器等),
则可通过实现自己的WebMvcConfigurer类,并使用@Configuration注解修饰该类、但不要使用@EnableWebMvc注解修饰。
实现该类的如下方法:
- addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers):添加参数解析器
- addFormatters(FormatterRegistry registry):添加格式化器
- addInterceptors(InterceptorRegistry registry):添加拦截器。
- addViewControllers(ViewControllerRegistry registry):添加视图控制器
- addResourceHandlers: 添加额外的静态资源处理目录。
代码演示:
若要在保留自动配置的基础上增加一些自定义的Spring MVC配置,可以这些写,这里只是弄个框架。
▲ 定制方式二:
如果要实现自定义RequestMappingHandlerMapping、RequestMappingHandlerAdapter或ExceptionHandlerExceptionResolver
代替自动配置自动配置的这些Bean。
RequestMappingHandlerMapping :根据@RequestMapping注解负责请求映射到指定控制器的指定处理方法。
RequestMappingHandlerAdapter :它是配合RequestMappingHandlerMapping使用。
ExceptionHandlerExceptionResolver: 它主要做异常解析,它主要为@ExceptionHandler注解修饰的异常处理方法来提供支持。
要通过定义WebMvcRegistrations Bean来注册它们。
代码演示:
▲ 定制方式三:
本质:用自定义的Bean,取代Spring Boot为Spring MVC自动配置的Bean
配置自定义的ConfigurableWebBindingInitializer,它会取代自动配置的WebBindingInitializer
WebBindingInitializer它也是Spring MVC本身的API,
它的作用就是为每个请求都初始化一个WebBinder,而WebBinder就负责完成数据绑定。
代码演示: