Spring MVC配置:WebMvcConfigurer与WebMvcConfigurerAdapter的历史、使用差异揭秘
`WebMvcConfigurer`和`WebMvcConfigurerAdapter`都和Spring MVC配置相关,不过存在诸多不同。 历史版本差异 `WebMvcConfigurerAdapter`在Spring 3.2被引入,作为一个抽象类,它实现了`WebMvcConfigurer`接口,该类包含`WebMvcConfigurer`接口所有方法的空实现。这使得开发者在需要自定义Spring MVC配置时,不必实现`WebMvcConfigurer`接口的所有方法,只需要继承`WebMvcConfigurerAdapter`并按需重写方法即可。 而`WebMvcConfigurer`是一个接口,从Spring 5.0开始,`WebMvcConfigurerAdapter`被标记为过时,推荐直接实现`WebMvcConfigurer`接口。这是因为Java 8引入了默认方法,使得接口可以有方法的默认实现,`WebMvcConfigurer`接口中定义了许多默认方法,这样开发者实现该接口时,无需实现其所有方法,按需重写默认方法就行。 使用方式差异 使用`WebMvcConfigurerAdapter`时,需要创建一个类继承`WebMvcConfigurerAdapter`,并重写需要的方法。示例代码如下: ```java import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; // 注意:在Spring 5.0及以后版本,该类已过时 @Deprecated public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/home").setViewName("home"); } } ``` 使用`WebMvcConfigurer`时,需要创建一个类实现`WebMvcConfigurer`接口,并重写需要的方法。示例代码如下: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class MyWebMvcConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/home").setViewName("home"); } } ``` `WebMvcConfigurerAdapter`是早期为方便开发者自定义Spring MVC配置而提供的抽象类,随着Java 8默认方法的引入,`WebMvcConfigurer`接口本身就能满足开发者按需重写方法的需求,所以`WebMvcConfigurerAdapter`被标记为过时,推荐使用`WebMvcConfigurer`接口进行Spring MVC的自定义配置。 ######[AI问答 | 569点数解答 | 2025-09-17 11:19:00]
- Spring框架实战:从配置到实现,搞定员工信息查询功能(GPT | 2135点数解答 | 2024-06-12 08:32:35)318
- MySQL 数据库操作:用德鲁伊连接池和 Spring JDBC 实现 MVC 架构下 Student 表操作及事务测试全解析(字节豆包 | 1115点数解答 | 2025-03-19 11:17:31)298
- Spring JDBC+德鲁伊连接池:MVC架构下MySQL学生表查询、事务验证及代码实现全解析(DeepSeek | 1275点数解答 | 2025-03-19 11:21:32)283
- IntelliJ IDEA 搭建 Spring Boot 项目:从创建到 JPA 实体类及数据源配置全攻略(讯飞星火 | 920点数解答 | 2024-10-31 15:37:22)267
- JSP 实现商品展示模块:分页、搜索、交互与美观界面全搞定!(字节豆包 | 19点数解答 | 2024-12-13 15:00:43)345
- 选科组合最高分求解:C++实现及注意要点(字节豆包 | 258点数解答 | 2025-08-28 12:51:41)152
- PyCharm 中用 Selenium 编写自动化测试脚本,轻松登录 eShop 测试平台并点击“我的订单”(字节豆包 | 304点数解答 | 2024-11-06 15:38:30)441
- iOS开发大揭秘:MVC与MVVM的区别及选择策略(阿里通义 | 285点数解答 | 2023-11-08 00:36:15)287
- 揭秘!Angular.js 究竟是 MVC 还是 MVVM 框架?(阿里通义 | 65点数解答 | 2023-11-09 01:18:42)323
- 手把手教你在Jenkins中配置并发执行线程数,附负载调整提示!( | 253点数解答 | 2024-01-10 10:12:35)407
- Flink启动slot个数为0?剖析flink-conf.yaml中taskmanager.numberoftaskslots配置问题(阿里通义 | 396点数解答 | 2024-03-28 14:16:08)450
- Zuul 为 /opcenter/clue/upload/type 接口设置超时时间的 properties 配置示例(字节豆包 | 199点数解答 | 2024-11-15 11:15:46)260