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的配置工作。
相关推荐
老毛肚2 小时前
Spring boot 特性和自写Reids组件
java·spring boot·后端
武子康3 小时前
Java-05 深入浅出 MyBatis动态SQL与参数拼接完全指南
java·spring boot·后端
invicinble6 小时前
springboot提供的机制大全
java·spring boot·后端
西凉的悲伤8 小时前
SpringBoot WebClient 介绍
java·spring boot·后端·webclient
行者-全栈开发8 小时前
SpringBoot AOP 面向切面编程实战|4大企业级案例+自定义注解+5个避坑指南
spring boot·aop·权限校验·自定义注解·日志记录·避坑指南·切面编程
Full Stack Developme9 小时前
Spring Boot 状态机 与 com.alibaba.cola 中的状态机
java·spring boot·后端
咕噜咕噜啦啦9 小时前
从spring到spring boot——JAVA项目开发
java·前端·spring boot·后端·spring
invicinble10 小时前
springboot出现的原因(一)--处理spring和maven的关系
spring boot·spring·maven
happymaker062610 小时前
SpringBoot学习日记——DAY05(SpringBoot整合MyBatis-plus实现增删改查)
spring boot·学习·mybatis
phltxy11 小时前
RabbitMQ SpringBoot消息队列与应用间通信
spring boot·rabbitmq·java-rabbitmq