SpringMvc定制化深入探究原理

 更新时间:2022年10月20日 15:47:08   作者:刘婉晴  
SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦,这篇文章主要介绍了SpringMvc定制化原理

一、SpringBoot 自动配置套路

引入场景 starter —— xxxxAutoConfiguration —— 导入 xxxx组件 —— 绑定 xxxxProperties —— 绑定配置文件项

因此,需要修改时只需要修改配置文件项

二、定制化常见方式

使用 @Bean + 编写自定义配置类 ,增加或替换容器中的一些组件 (常用)

修改配置文件

使用定制化器 —— xxxxCustomizer

编写配置类, 实现 WebMvcConfigurer 接口,定制化 web 功能 (常用)

@EnableWebMvc + 实现 WebMvcConfigurer 接口 ,全面接管 SpringMvc,所有 SpringBoot 默认规则失效 (慎用)

@EnableWebMvc 原理

  • WebMvcAutoConfiguration 中有全部 SpringMvc 默认自动配置功能类(静态资源、欢迎页…)
  • 一旦使用 @EnableWebMvc ,其是一复合注释,导入 DelegatingWebMvcConfiguration 类
@Import({<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->DelegatingWebMvcConfiguration.class})

DelegatingWebMvcConfiguration.class 只保证 SpringMvc 最底层的使用,其作用如下

(1)把系统中的所有 WebMvcConfigurer 拿过来,无论有多少 Configurer 都是这些 Configurer 合起来一起生效

(2)@EnableWebMvc 自动配置了一些最底层的组件(RequestMappingHandlerMapping …),这些组件依赖的组件都是从容器中获取

WebMvcAutoConfiguration 生效的条件为容器中没有 WebMvcConfigurationSupport.class这个组件(这个组件在DelegatingWebMvcConfiguration 中,DelegatingWebMvcConfiguration 在 EnableWebMvc 中)

@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)

因此,使用 @EnableWebMvc 后,所有的自动配置规则都失效,慎用 !!!

三、使用 @EnableWebMvc 案例

如下为 @EnableWebMvc 全面接管下,需自定义静态资源访问路径代码示例,不止是这个行为需要自定义,其他自动配置的行为全部需要自定义,因此要慎用

@Configuration
@EnableWebMvc // 完全控制 SpringMvc , 全面接管 —— 谨慎使用
// 全面接管含义: SpringBoot 官方列举的自动配置,全部失效,必须自定义行为
public class AdminWebConfig implements WebMvcConfigurer {
    // 全面接管下,定义静态资源行为
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 访问 a 路径下的所有请求,都去 static 文件夹下寻找
        registry.addResourceHandler("/a/**").addResourceLocations("classpath:/static/");
    }
}

到此这篇关于SpringMvc定制化深入探究原理的文章就介绍到这了,更多相关SpringMvc定制化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring中自定义数据类型转换的方法详解

    Spring中自定义数据类型转换的方法详解

    Spring3引入了一个core.onvert包,提供一个通用类型转换系统。在Spring容器中,可以使用这个系统作为PropertyEditor实现的替代,将外部化的bean属性值字符串转换为所需的属性类型。本文将详解这一系统的使用方法,需要的可以参考一下
    2022-06-06
  • 解决SpringBoot在后台接收前台传递对象方式的问题

    解决SpringBoot在后台接收前台传递对象方式的问题

    这篇文章主要介绍了解决SpringBoot在后台接收前台传递对象方式的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Spring Boot如何动态创建Bean示例代码

    Spring Boot如何动态创建Bean示例代码

    这篇文章主要给大家介绍了关于Spring Boot如何动态创建Bean的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • Java中IO流的BufferedOutputStream和FileOutputStream对比

    Java中IO流的BufferedOutputStream和FileOutputStream对比

    这篇文章主要介绍了Java中IO流的BufferedOutputStream和FileOutputStream对比,不带缓冲的操作,每读一个字节就要写入一个字节,由于涉及磁盘的IO操作相比内存的操作要慢很多,所以在读写的字节比较少的情况下,效率比较低,需要的朋友可以参考下
    2023-07-07
  • Java如何读取jar包中的resource资源文件

    Java如何读取jar包中的resource资源文件

    这篇文章主要介绍了Java如何读取jar包中的resource资源文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Spring Cloud Gateway 2.x跨域时出现重复Origin的BUG问题

    Spring Cloud Gateway 2.x跨域时出现重复Origin的BUG问题

    这篇文章主要介绍了Spring Cloud Gateway 2.x跨域时出现重复Origin的BUG问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Java Socket编程笔记_动力节点Java学院整理

    Java Socket编程笔记_动力节点Java学院整理

    Socket对于我们来说就非常实用了。下面是本次学习的笔记。主要分异常类型、交互原理、Socket、ServerSocket、多线程这几个方面阐述
    2017-05-05
  • Spring Boot应用的极速部署脚本示例代码

    Spring Boot应用的极速部署脚本示例代码

    最近在工作中遇到了一个问题,需要极速的部署Spring Boot应用,发现网上这方面的资料较少,所以自己来总结下,这篇文章主要给大家介绍了关于Spring Boot应用的极速部署脚本的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • Spring Boot 与 Kotlin 使用Redis数据库的配置方法

    Spring Boot 与 Kotlin 使用Redis数据库的配置方法

    Redis是目前业界使用最广泛的内存数据存储。下面通过本文给大家介绍Spring Boot 与 Kotlin 使用Redis数据库的配置方法,感兴趣的朋友一起看看吧
    2018-01-01
  • 解决JDBC Connection Reset的问题分析

    解决JDBC Connection Reset的问题分析

    这篇文章主要介绍了解决JDBC Connection Reset的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论