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的配置工作。
相关推荐
星辰云-1 小时前
# 基于Spring Boot的德州特产扒鸡商城系统(毕设|源码|论文|演示视频)
spring boot·后端·课程设计
星辰云-1 小时前
基于Spring Boot的旅游景点票务系统的设计与实现(毕设项目,附完整源码)
spring boot·后端·课程设计
十年Java程序媛2 小时前
JVM 基础与 GC 垃圾回收详解|可达性分析、分代模型、垃圾收集器、STW
java·开发语言·jvm·spring boot·后端·面试
她的男孩3 小时前
JAR 全对仍 checksum mismatch:Forge Admin 把 Flyway 从 filesystem 改成 classpath
java·数据库·spring boot
小蒜学长3 小时前
基于数据挖掘的京东商城商品推荐系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·推荐系统·个性化推荐
IT研究室3 小时前
最新计算机毕业设计选题推荐-基于spring boot的医院体检管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
长不大的杨瑞杰3 小时前
把 Spring Boot 接口变成 AI 工具:OpenAPI、参数映射与异常语义化实战
人工智能·spring boot·后端
RuoyiOffice3 小时前
Vue3+TypeScript 企业管理平台统一UI:新增一个模块,为什么还要重新调样式?
spring boot·typescript·vue3·组件化开发·企业管理软件·ruoyi office·统一ui
流烟默1 天前
SSE 实战:在 SpringBoot + Vue 项目中零依赖实现轻量级实时消息推送
vue.js·spring boot·后端·sse
ly76891 天前
Spring Boot 集成 PostgreSQL 的连接池调优:HikariCP、prepared statement 与服务器资源边界
spring boot·postgresql·hikaricp·连接池调优