Spring MVC和Spring Boot的三层架构差异

Spring MVC和Spring Boot的三层架构本质上是相同的,但两者在实现上存在一些差异,尤其在开发效率、配置方式和项目结构方面。

1. 三层架构概念(两者通用)

无论是Spring MVC还是Spring Boot,三层架构的核心概念是一样的:

Controller 层

接收 HTTP 请求,负责路由、参数校验、请求转发,调用 Service 层

Service 层

负责具体的业务逻辑,执行数据处理、组合查询、复杂计算等。

DAO / Repository 层

负责与数据库打交道,提供增删改查 (CRUD) 等数据访问操作

2. 主要区别对比

架构名称

Spring MVC

Spring Boot

项目启动方式

需要配置Web容器(如 Tomcat)并手动启动

内置Tomcat(默认),可直接运行main方法启动

配置方式

需手动配置XML文件,或者使用@Configuration

约定大于配置,默认配置即开箱即用,极大减少了XML配置

依赖管理

需手动引入相关依赖,版本管理复杂

提供 starter依赖(如spring-boot-starter-web),简化依赖管理

Controller 层

使用@Controller、@RequestMapping

使用@RestController(自动加@ResponseBody),简化JSON响应

Service 层

使用@Service,需手动定义Bean

使用@Service,结合@Autowired自动注入,简化配置

DAO /

Repository 层

需手动配置@Repository

、数据库连接池、数据源等

使用spring-boot-starter-data-jpa等Starter自动配置数据源

异常处理

需编写@ExceptionHandler来处理异常

提供@RestControllerAdvice,全局异常处理更简便。

静态资源管理

需手动配置/webapp或/static目录

默认将/static、/public、/resources作为静态资源路径

热部署

需借助JRebel等工具实现

内置spring-boot-devtools,支持热部署,提升开发效率

嵌入式服务器

❌ 需单独配置Tomcat / Jetty等服务器

✅ 自带 Tomcat(默认) / Jetty / Undertow,可快速启动

监控和管理

无内置监控功能,需手动整合

✅ 内置spring-boot-starter-actuator,轻松实现应用监控

3. 项目结构差异

🔹 Spring MVC 项目结构

传统的Spring MVC项目结构较复杂,通常需要手动配置Controller、Service、DAO、视图解析器等:

/src
 └── main
     ├── java
     │   ├── com.example.controller
     │   │   └── OrderController.java
     │   ├── com.example.service
     │   │   └── OrderService.java
     │   ├── com.example.repository
     │   │   └── OrderRepository.java
     │   ├── com.example.model
     │   │   └── Order.java
     │   └── com.example.config
     │       └── AppConfig.java
     ├── resources
     │   ├── applicationContext.xml
     │   ├── dispatcher-servlet.xml
     │   └── web.xml

🔹 Spring Boot 项目结构

Spring Boot 项目简化了繁琐的配置,默认支持自动配置:

/src
 └── main
     ├── java
     │   ├── com.example
     │   │   ├── Application.java         // 主启动类
     │   │   ├── controller
     │   │   │   └── OrderController.java
     │   │   ├── service
     │   │   │   └── OrderService.java
     │   │   ├── repository
     │   │   │   └── OrderRepository.java
     │   │   └── model
     │   │       └── Order.java
     ├── resources
     │   └── application.yml              // 核心配置文件

4. 代码示例对比

🔹 Spring MVC 示例

OrderController.java

@Controller
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public String getOrderById(@PathVariable Long id, Model model) {
        Order order = orderService.getOrderById(id);
        model.addAttribute("order", order);
        return "orderDetail";  // 返回视图名
    }
}

🔹 Spring Boot 示例

OrderController.java

@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    @GetMapping("/{id}")
    public Order getOrderById(@PathVariable Long id) {
        return orderService.getOrderById(id);  // 直接返回 JSON
    }
}

✅ @RestController直接返回JSON 数据,无需再加@ResponseBody。

✅ @GetMapping代替@RequestMapping,更简洁明了。

5. 哪种更适合你的项目?

✅ 如果你的项目是全新开发,推荐使用 Spring Boot,因为它的自动配置和简化操作能提升开发效率。

✅ 如果你的项目是老项目或已使用 Spring MVC,继续使用 Spring MVC 可能更稳定,除非需要升级。

6. 终极总结

推荐场景

传统企业项目、复杂的 Web 应用

新项目、快速开发、微服务架构

开发速度

⏳ 速度较慢,需要大量配置

🚀 快速,默认配置可直接运行

学习曲线

📈 稍复杂,配置繁琐

📉 更简单,自动化配置

性能优化

手动优化

内置优化机制

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务