Spring + Spring MVC VS. Spring Boot + Spring MVC
在 Java Web 开发中,Spring 和 Spring MVC 传统组合与 Spring Boot + Spring MVC 组合是两种常见的架构方式。今天,我们用一个 "Hello World" 案例来对比它们的实现,看看 Spring Boot 到底有多香!
Spring MVC 是 Spring 框架中的一个模块,专为简化 Web 应用开发设计。它基于经典的 MVC 模式(Model-View-Controller),将程序拆分为三个核心部分:
- Model(模型):处理数据和业务逻辑,例如数据库操作;
- View(视图):展示数据,如网页、图表等;
- Controller(控制器):接收用户请求,调用模型处理数据,再将结果交给视图渲染。
Spring MVC 的工作流程类似“前台接待”:
- 用户通过浏览器发起请求,由 DispatcherServlet(核心调度器)统一接收;
- DispatcherServlet 根据请求路径找到对应的控制器(Controller);
- 控制器处理请求(如调用业务逻辑),生成数据模型(Model);
- 最终将数据和视图模板结合,返回给用户(如生成 HTML 页面)。
1. 传统 Spring + Spring MVC 方式
项目结构
传统的 Spring 项目需要手动配置 Spring、Spring MVC、Servlet 容器,通常采用 web.xml
或 Java 配置类。
hello-world-spring
│── src/main/java
│ ├── com.example.controller
│ │ ├── HelloController.java
│ ├── com.example.config
│ │ ├── AppConfig.java
│ │ ├── WebConfig.java
│── src/main/webapp
│ ├── WEB-INF/web.xml
│── pom.xml
1.1 依赖(pom.xml)
<dependencies>
<!-- Spring 核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.30</version>
</dependency>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.30</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
1.2 配置 Spring(AppConfig.java)
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
1.3 配置 Spring MVC(WebConfig.java)
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
}
1.4 web.xml
配置
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.1">
<context-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.example.config.AppConfig</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.example.config.WebConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
1.5 编写 Controller(HelloController.java)
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring!";
}
}
2. Spring Boot + Spring MVC 方式
Spring Boot 消除了大量的配置工作,让开发更简洁。
2.1 项目结构
hello-world-spring-boot
│── src/main/java/com/example
│ ├── HelloApplication.java
│ ├── HelloController.java
│── pom.xml
2.2 依赖(pom.xml)
<dependencies>
<!-- Spring Boot Web 依赖,自动包含 Spring 和 Spring MVC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
2.3 启动类(HelloApplication.java)
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
2.4 Controller(HelloController.java)
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
3. 对比分析
比较项 | 传统 Spring + Spring MVC | Spring Boot + Spring MVC |
---|---|---|
依赖管理 | 需要手动引入多个 Spring 依赖 | 只需 spring-boot-starter-web |
配置 | 需要 web.xml 或 Java 配置 |
零配置,自动配置 |
启动方式 | 需要部署到 Tomcat | 内嵌 Tomcat,直接运行 |
开发效率 | 需要手动管理 Bean、DispatcherServlet | 约定优于配置,自动注入 |
部署 | 生成 war 包,手动部署 | 直接运行 jar 包 |
4. 结论
- Spring Boot + Spring MVC 让开发变得更简单、更快速。
- 传统 Spring + Spring MVC 需要大量配置,适合已有的复杂企业应用,但不够灵活。
- 如果是新项目,建议直接使用 Spring Boot,减少配置,提高开发效率! 🚀