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

发布于:2025-04-08 ⋅ 阅读:(15) ⋅ 点赞:(0)

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());
    }
}

对比表格

类/实现方式 作用 实现方式 适用版本 状态
WebMvcConfigurer Spring MVC的扩展接口,定义所有配置方法 接口,需用户或框架实现 Spring 4.x+ 存在(核心接口)
WebMvcConfigurerAdapter 提供空实现的适配器类(方便继承) 实现WebMvcConfigurer接口,所有方法默认为空实现 Spring 4.x(已移除于5.x) 已过时/移除
WebMvcAutoConfiguration Spring 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中的最佳实践。