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定制化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • k8s部署springboot实现前后端分离项目

    k8s部署springboot实现前后端分离项目

    本文主要介绍了k8s部署springboot实现前后端分离项目,主要包括配置文件、镜像构建和容器编排等方面,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Spring Boot实战之静态资源处理

    Spring Boot实战之静态资源处理

    这篇文章主要介绍了Spring Boot实战之静态资源处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Maven是什么?Maven的概念+作用+仓库的介绍+常用命令的详解

    Maven是什么?Maven的概念+作用+仓库的介绍+常用命令的详解

    Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑.,本文给大家介绍Maven的概念+作用+仓库的介绍+常用命令,感兴趣的的朋友跟随小编一起看看吧
    2020-09-09
  • 聊聊spring @Transactional 事务无法使用的可能原因

    聊聊spring @Transactional 事务无法使用的可能原因

    这篇文章主要介绍了spring @Transactional 事务无法使用的可能原因,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java 基于Jakarta Mail实现收发邮件

    Java 基于Jakarta Mail实现收发邮件

    这篇文章主要介绍了Java 基于Jakarta Mail实现收发邮件的功能,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-04-04
  • java连接Access数据库的方法

    java连接Access数据库的方法

    这篇文章主要为大家详细介绍了java连接Access数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • java使用FuncGPT慧函数对Mybatis进行一对一查询映射处理

    java使用FuncGPT慧函数对Mybatis进行一对一查询映射处理

    这篇文章主要介绍了java使用FuncGPT慧函数对Mybatis进行一对一查询映射处理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • java在linux本地执行shell命令的实现方法

    java在linux本地执行shell命令的实现方法

    本文主要介绍了java在linux本地执行shell命令的实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 深入浅析Spring 的aop实现原理

    深入浅析Spring 的aop实现原理

    AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。本文给大家介绍Spring 的aop实现原理,感兴趣的朋友一起学习吧
    2016-03-03
  • 深入C++ typedef的用法总结(必看)

    深入C++ typedef的用法总结(必看)

    本篇文章是对C++中typedef的用法进行了详细的总结分析,需要的朋友参考下
    2013-05-05

最新评论