SpringMVC 的优点和缺点
# 优点
- 1. 松耦合,职责清晰:基于 MVC 分层设计,Controller(请求处理)、Service(业务逻辑)、DAO(数据访问)职责分离,代码可维护性强。
- 2. 灵活的 URL 映射:通过
@RequestMapping(或@GetMapping/@PostMapping)注解,支持多种 URL 匹配规则(如路径参数/user/{id}、通配符/user/*),可灵活映射请求到 Controller 方法。 - 3. 强大的参数绑定与校验:支持自动将请求参数(URL 参数、表单参数、JSON 参数)绑定到 Controller 方法的参数(如
@RequestParam、@RequestBody),结合 JSR-380(如@NotNull、@Size)可实现参数校验,减少重复代码。 - 4. 丰富的视图支持:支持 JSP、Thymeleaf、FreeMarker 等多种视图技术,也可通过
@ResponseBody直接返回 JSON/XML,适配前后端分离架构。 - 5. 集成 Spring 生态:无缝集成 Spring 的 IOC、AOP、事务管理等功能,可直接使用
@Autowired注入 Bean,无需额外配置。 - 6. 拦截器机制:通过实现
HandlerInterceptor接口,可在请求处理前(preHandle)、处理后(postHandle)、视图渲染后(afterCompletion)插入自定义逻辑(如登录验证、日志记录),扩展性强。
# 缺点
- 1. 配置相对复杂(对比 SpringBoot):传统 SpringMVC 需配置
DispatcherServlet(web.xml 或 JavaConfig)、视图解析器、拦截器等,配置项较多;虽可通过注解简化,但仍比 SpringBoot 的 “零配置” 繁琐。 - 2. 对异步支持较弱(早期版本):SpringMVC 3.x 及之前对异步请求(如长轮询、WebSocket)支持不足,需通过复杂配置实现;虽 4.x 后引入
@Async和DeferredResult,但对比 Spring WebFlux(响应式编程)仍不够灵活。 - 3. 前端依赖较强(传统模式):传统 SpringMVC 需结合视图技术(如 JSP),前后端代码耦合度较高;虽支持前后端分离,但需手动处理 JSON 序列化 / 反序列化,不如 SpringBoot+SpringMVC 的默认配置便捷。
- 4. 学习成本(对新手):需理解 MVC 流程、拦截器、参数绑定、视图解析等概念,新手入门需一定时间;对比轻量级框架(如 FastAPI、Flask),学习曲线较陡。
上次更新: 12/30/2025