SpringBoot 和Spring MVC的区别是什么
·
简单来说,Spring Boot 和 Spring MVC 不是二选一的关系,而是协同工作的关系。
我们可以用一个形象的比喻来理解:
Spring MVC 像是汽车的发动机和传动系统(核心功能),而 Spring Boot
像是提供了一辆已经组装好的、插上钥匙就能开的整车(快速开发方案)。
核心区别对比表格
特性 |Spring MVC |Spring Boot
本质 |一个基于MVC模式的Web框架 |一个用于快速开发Spring应用的起步工具和默认配置框架
核心功能 |提供DispatcherServlet、控制器、视图解析器等,用于构建Web层。 |自动配置、起步依赖、内嵌服务器和生产就绪功能。
配置方式 |大量XML或Java显示配置。需要手动配置组件扫描、视图解析器、数据库连接等。 |约定优于配置。提供大量自动配置,极大减少了手动配置的工作量。
依赖管理 |需要开发者自己管理依赖库的版本,解决潜在的兼容性问题。 |通过起步依赖,只需引入一个依赖(如spring-boot-starter-web),所有相关依赖的兼容版本都会自动引入。
部署方式 |需要将应用打包成WAR文件,部署到外部的Web服务器(如Tomcat)。 |可以将应用打包成独立的JAR文件,因为它内嵌了Web服务器(默认Tomcat)。
独立运行 |不能独立运行,依赖外部Servlet容器。 |通过main方法即可独立运行,无需部署到外部容器。
深入解析
1. Spring MVC:Web框架的核心
Spring MVC是Spring框架中的一个模块,专门用于构建Web应用程序。它实现了MVC设计模式:
模型:封装应用程序数据。
视图:负责渲染模型数据,通常生成HTML输出。
控制器:处理用户请求,构建模型,并选择合适的视图。
在没有Spring Boot的时代,使用Spring MVC的步骤通常是:
在web.xml中配置DispatcherServlet。
编写一个Spring配置文件(XML),开启组件扫描,配置视图解析器、数据源等。
将应用打包为WAR,部署到Tomcat等外部服务器。
这是一个典型的Spring MVC控制器:
java
// 这是一个Spring MVC的控制器,无论你用不用Spring Boot,写法都一样。
@Controller
public class MyController {
@GetMapping("/hello")
public String sayHello(Model model) {
model.addAttribute("message", "Hello, Spring MVC!");
return "hello"; // 返回视图名(例如hello.jsp)
}
}
关键点: 即使你用了Spring Boot,你仍然是在使用Spring MVC来处理Web请求。
上面的代码在Spring Boot应用里完全适用。
2. Spring Boot:让开发变简单的“魔法”
Spring Boot并没有引入新的功能,它的目标是让基于Spring的开发变得更快、更简单。它通过以下方式做到了这一点:
自动配置:Spring Boot会根据你引入的依赖(如spring-boot-starter-web、spring-boot-starter-data-jpa),
自动为你配置Spring应用。例如,只要你引入了spring-boot-starter-web,它就自动配置了Spring MVC所需的核心组件
(如DispatcherServlet、视图解析器等),你无需写一行配置代码。
起步依赖:这些依赖本质上是“依赖的合集”。例如,你只需要引入spring-boot-starter-web,它会自动帮你引入
Spring MVC、Tomcat(作为内嵌服务器)、Jackson(用于JSON处理)等一系列开发Web应用所需的库,并且保证了它们版本之间的兼容性。
内嵌服务器:Spring Boot应用可以直接将Tomcat、Jetty或Undertow内嵌在最终的JAR包中。这意味着你不需要部署WAR文件,
可以直接通过java -jar命令运行一个独立的Java应用,它自己就包含了Web服务器。
一个最简单的Spring Boot Web应用:
pom.xml (只需要一个起步依赖)
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Application.java (主类,用于启动)
java
@SpringBootApplication // 这是一个组合注解,开启了自动配置和组件扫描
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args); // 启动内嵌服务器和Spring应用
}
}
MyController.java (和上面Spring MVC例子完全一样的控制器)
java
@RestController // 等同于 @Controller + @ResponseBody
public class MyController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!"; // 直接返回字符串给浏览器,而不是视图名
}
}
运行 Application.main()方法,访问 http://localhost:8080/hello 即可看到结果。
总结与关系
Spring MVC 是核心:它是一个Web框架,提供了构建Web应用的基础架构。
Spring Boot 是加速器:它通过自动配置、起步依赖和内嵌服务器,简化了基于Spring(包括Spring MVC)的应用开发。
你可以:
只用 Spring MVC 而不使用 Spring Boot(传统的SSH/SSM开发方式)。
用 Spring Boot 来简化 Spring MVC 以及其他Spring模块(如Spring Data, Spring Security)的开发和集成。
这是目前最主流、最推荐的方式。
所以,当有人问“学Spring Boot要不要先学Spring MVC”时,答案是:最好要学。理解Spring MVC的核心原理,
能让你更好地理解Spring Boot在背后为你做了什么,遇到问题时也能更快地定位和解决。
更多推荐
所有评论(0)