37、springboot 为 spring mvc 提供的自动配置及对自动配置的一些自定义定制(大体思路)

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就负责完成数据绑定。

代码演示:

★ 全面接管(放弃自动配置)------极少使用

复制代码
 如果使用@Configuration和@EnableWebMvc注解同时修饰自己的Spring MVC配置类。

 这意味着完全关闭了Spring Boot为Spring MVC的自动配置,开发者必须手动完成所有关于Spring MVC的配置工作。
相关推荐
dkbnull18 小时前
深入理解Spring两大特性:IoC和AOP
spring boot
洋洋技术笔记1 天前
Spring Boot条件注解详解
java·spring boot
洋洋技术笔记2 天前
Spring Boot配置管理最佳实践
spring boot
用户8307196840823 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
大道至简Edward3 天前
Spring Boot 2.7 + JDK 8 升级到 Spring Boot 3.x + JDK 17 完整指南
spring boot·后端
洋洋技术笔记3 天前
Spring Boot启动流程解析
spring boot·后端
怒放吧德德3 天前
Spring Boot 实战:RSA+AES 接口全链路加解密(防篡改 / 防重放)
java·spring boot·后端
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
QQ5110082854 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe4 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5