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的配置工作。
相关推荐
刘一说17 小时前
深入理解 Spring Boot Actuator:构建可观测性与运维友好的应用
运维·spring boot·后端
郝开17 小时前
最终 2.x 系列版本)2 - 框架搭建:pom配置;多环境配置文件配置;多环境数据源配置;测试 / 生产多环境数据源配置
java·spring boot·后端
用户37779672109617 小时前
RabbitMQ Unacked 消息深度解析:机制、问题与解决方案
spring boot·rabbitmq
小雨的光19 小时前
QuickRedis
spring boot·redis
星光一影20 小时前
Spring Boot 3+Spring AI 打造旅游智能体!集成阿里云通义千问,多轮对话 + 搜索 + PDF 生成撑全流程
人工智能·spring boot·spring
一 乐1 天前
医疗管理|医院医疗管理系统|基于springboot+vue医疗管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·医疗管理系统
华仔啊1 天前
SpringBoot 2.x 和 3.x 的核心区别,这些变化你必须知道
java·spring boot·后端
ruleslol1 天前
SpringBoot面试题03-BeanFactory
spring boot
刘一说1 天前
深入理解 Spring Boot 中的数据库迁移:Flyway 与 Liquibase 实战指南
数据库·spring boot·oracle
一叶飘零_sweeeet1 天前
SpringBoot 集成 RabbitMQ
spring boot·rabbitmq·java-rabbitmq