当前位置: 首页 > news >正文

spring boot 实现spring mvc过程中WebMvcConfigurer接口及其相关实现类的详细对比

WebMvcConfigurer接口及其相关实现类的详细对比

WebMvcConfigurer是Spring MVC的核心接口,用于扩展和自定义Spring MVC的配置行为。以下是其相关实现类的对比分析:


在这里插入图片描述

1. WebMvcConfigurer 接口
  • 作用:定义Spring MVC的扩展点,允许用户自定义以下配置:

    • 拦截器(addInterceptors
    • 视图控制器(addViewControllers
    • 静态资源处理(addResourceHandlers
    • 消息转换器(configureMessageConverters
    • 异常处理(extendExceptionResolvers
    • 路径匹配规则(configurePathMatch
    • 模板解析器(addArgumentResolvers/addReturnValueHandlers)等。
  • 实现方式

    • 直接实现接口:需覆盖所有方法(推荐使用Java 8+的默认方法)。
    • 继承适配器类:旧版通过WebMvcConfigurerAdapter实现(已过时)。

2. WebMvcConfigurerAdapter(已过时)
  • 作用:Spring Framework 4.x中提供的适配器类,实现了WebMvcConfigurer接口的所有方法,提供空实现,方便用户继承并覆盖需要的方法。
  • 适用版本:Spring Framework 4.x(在Spring 5.x中被移除)。
  • 状态已弃用,推荐直接实现WebMvcConfigurer接口(Java 8+的默认方法简化了实现)。

3. Spring Boot的实现类

Spring Boot通过以下类实现WebMvcConfigurer接口,提供默认配置:

3.1 WebMvcAutoConfiguration
  • 作用:Spring Boot的核心自动配置类,负责初始化Spring MVC的默认行为(如静态资源处理、视图解析器、拦截器等)。
  • 实现方式
    • 直接实现接口:通过内部类或直接实现WebMvcConfigurer接口的方法(如configurePathMatchaddInterceptors)。
    • Spring Boot 3.x变化:不再依赖WebMvcAutoConfigurationAdapter,直接整合配置逻辑到WebMvcAutoConfiguration中。
3.2 WebMvcAutoConfigurationAdapter(已移除)
  • 历史作用(Spring Boot 2.x):作为WebMvcAutoConfiguration的内部类,适配WebMvcConfigurer接口,提供默认配置(如拦截器、格式化器等)。
  • Spring Boot 3.x状态已移除,其功能被直接整合到WebMvcAutoConfiguration中。

4. 用户自定义的实现类

用户可通过以下方式自定义配置:

@Configuration
public class MyWebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor());
    }
}

对比表格

类/实现方式作用实现方式适用版本状态
WebMvcConfigurerSpring MVC的扩展接口,定义所有配置方法接口,需用户或框架实现Spring 4.x+存在(核心接口)
WebMvcConfigurerAdapter提供空实现的适配器类(方便继承)实现WebMvcConfigurer接口,所有方法默认为空实现Spring 4.x(已移除于5.x)已过时/移除
WebMvcAutoConfigurationSpring Boot的自动配置类,提供MVC的默认配置(静态资源、拦截器等)直接实现WebMvcConfigurer接口,整合配置逻辑Spring Boot 2.x+存在(核心自动配置)
WebMvcAutoConfigurationAdapter(Spring Boot 2.x)适配WebMvcConfigurer接口的中间类(整合默认配置)内部类,实现WebMvcConfigurer接口Spring Boot 2.x已移除于3.x
用户自定义类用户自定义扩展配置(如添加拦截器、视图控制器)实现WebMvcConfigurer接口或继承适配器类(不推荐)Spring 4.x+存在(用户自定义)

关键差异与注意事项

  1. 适配器类的演变

    • Spring 4.x:用户通过继承WebMvcConfigurerAdapter简化实现。
    • Spring 5.x+WebMvcConfigurerAdapter被移除,推荐直接实现接口(Java 8的默认方法简化了实现)。
    • Spring Boot 3.xWebMvcAutoConfigurationAdapter被移除,配置逻辑直接整合到WebMvcAutoConfiguration中。
  2. 用户自定义配置的优先级

    • Spring Boot会合并默认配置与用户自定义配置,通过@Order@Configuration的加载顺序控制优先级。
  3. 推荐实践

    • 直接实现接口:在Spring 5.x+中,直接实现WebMvcConfigurer接口并覆盖所需方法。
    • 避免使用适配器:优先使用Java 8的默认方法特性,避免过时的适配器类。

示例:自定义配置类

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    // 覆盖需要的方法,其他方法默认实现由接口的默认方法提供
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("index");
    }
}

通过以上对比,可以清晰理解不同实现类的历史演变和当前Spring Boot 3.x中的最佳实践。

相关文章:

  • Redis 的五种数据类型面试回答
  • 安全编码课程 实验6 整数安全
  • WPF依赖注入
  • 【金仓数据库】
  • 深入解析 MySQL 中的日期时间函数:DATE_FORMAT 与时间查询优化
  • HTTP 响应头 Strict-Transport-Security 缺失漏洞
  • GraphRAG与知识图谱
  • 【数据标准】数据标准化实施流程与方法-保障机制篇
  • 图灵逆向——题一-动态数据采集
  • createContext+useContext+useReducer组合管理React复杂状态
  • 代码片段 - C#实现多张图片根据重叠部分拼接图像
  • SpringBoot的简单介绍
  • Vue3实战八、路由权限和动态路由
  • 使用 Lua 脚本高效查询 Redis 键的内存占用
  • 【go】slice的浅拷贝和深拷贝
  • Python设计模式:适配模式
  • 2025 年江苏保安员职业资格考试经验分享​
  • starrocks split函数和trino split函数差异性
  • 【正点原子】如何设置 ATK-DLMP135 开发板 eth0 的开机默认 IP 地址
  • Windows RAC 集群故障:表决盘 “失踪” 致无法启动的排查实践
  • 拍卖网站功能需求文档/百度关键词点击价格查询
  • 做网站时候那个页面都是单独的吗/推广的方式有哪些
  • 墨刀做的网站设计/seo算法优化
  • wordpress给文章字段/北京网站优化企业
  • wordpress php fpm/网络优化行业的发展前景
  • 网站开发的wbs分解图/潮州网络推广