刚学Webref="/tag/156/" style="color:#874873;font-weight:bold;">开发的朋友常会遇到两个词:MVC 和 Spring。一个说‘我是一种设计思想’,一个说‘我是一个开发框架’,它们到底谁管谁?其实不是上下级关系,更像是‘老司机带新手上路’——MVC是导航图,Spring是那辆装好GPS、自动挡、还带语音提醒的车。
MVC不是Spring发明的,但Spring把它用熟了
MVC(Model-View-Controller)早在1970年代就出现在Smalltalk系统里,核心就三件事:
• Model 负责数据和业务逻辑(比如查用户、算订单总价);
• View 负责把数据画出来(比如HTML页面、JSON响应);
• Controller 负责接请求、调Model、选View(比如用户点‘提交订单’,Controller收到后让OrderService处理,再返回success.jsp)。
Spring MVC 模块,就是Spring团队基于这套思路,用Java实现的一套Web层解决方案。它没改MVC的本质,只是把每个角色都‘包好了’:@Controller 注解标出谁是控制器,@Service/@Repository 管Model层,而ViewResolver帮你自动找HTML或JSON模板。
举个真实小例子:登录功能怎么拆
假设你写一个登录页,输入账号密码点提交:
<form action="/login" method="post">
<input name="username" />
<input type="password" name="password" />
<button type="submit">登录</button>
</form>
后端对应这样写:
@Controller
public class LoginController {
@Autowired
private UserService userService;
@RequestMapping("/login")
public String handleLogin(String username, String password, Model model) {
User user = userService.authenticate(username, password);
if (user != null) {
model.addAttribute("welcome", "欢迎回来," + user.getName());
return "home"; // 返回 home.html
} else {
model.addAttribute("error", "账号或密码错误");
return "login"; // 返回 login.html
}
}
}
这里:Controller(LoginController)收请求、调Model(UserService)、塞数据进Model对象、决定返回哪个View(home 或 login)。整个流程清晰对应MVC三块,没有一丁点Spring自创的‘第四层’。
Spring Boot 让MVC更轻:约定大于配置
以前配Spring MVC要写一堆XML,现在用Spring Boot,加个spring-boot-starter-web依赖,Controller类上打个注解,就能跑起来。它默认用Thymeleaf做View,用Jackson序列化JSON,连ViewResolver都不用手动注册——就像买了新车,油门刹车方向盘都按人体工学调好了,你只管开车。
所以别被‘Spring太复杂’吓住。你写的第一个@Controller,本质就是在践行MVC;你调的每一个@Service,就是在充实Model;你返回的每一个字符串视图名,就是在指定View。Spring不是替代MVC,而是让MVC在Java世界里走得更稳、更快、少踩坑。