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 的工作流程类似“前台接待”:

  1. 用户通过浏览器发起请求,由 ‌DispatcherServlet‌(核心调度器)统一接收‌;
  2. DispatcherServlet 根据请求路径找到对应的控制器(Controller);
  3. 控制器处理请求(如调用业务逻辑),生成数据模型(Model);
  4. 最终将数据和视图模板结合,返回给用户(如生成 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,减少配置,提高开发效率! 🚀
posted @ 2025-02-22 15:34  xkfx  阅读(80)  评论(0)    收藏  举报