Spring、Spring MVC 与 Spring Boot 的关系与核心用途
1. 三者关系图解
+-------------------+
| Spring Boot | → 基于 Spring,简化配置与部署
+-------------------+▲| 依赖
+-------------------+
| Spring Framework | → 核心容器(IoC/AOP)与基础模块
+-------------------+▲| 扩展
+-------------------+
| Spring MVC | → 基于 Spring 的 Web 框架
+-------------------+
2. 核心用途对比
框架 | 核心用途 | 典型场景 |
---|---|---|
Spring | 提供轻量级容器(IoC/AOP),管理对象生命周期和依赖关系 | 任何需要解耦和模块化的Java应用 |
Spring MVC | 构建 Web 层应用,处理 HTTP 请求/响应,实现 MVC 分层架构 | 传统 Web 应用(如企业后台管理系统) |
Spring Boot | 快速启动 Spring 应用,通过自动配置和约定大于配置简化开发 | 微服务、REST API、快速原型开发 |
3. 详细解析
3.1 Spring Framework
- 核心功能:
- IoC(控制反转):通过容器管理对象的创建和依赖注入(如
@Autowired
)。 - AOP(面向切面编程):实现日志、事务等横切关注点的模块化。
- 数据访问:集成 JDBC、ORM 框架(如 Hibernate)。
- 事务管理:声明式事务支持(
@Transactional
)。
- IoC(控制反转):通过容器管理对象的创建和依赖注入(如
- 典型代码:
@Service
public class UserService {@Autowiredprivate UserRepository userRepo;
}
3.2 Spring MVC
- 核心功能:
- 请求处理:通过
@Controller
和@RequestMapping
映射 HTTP 请求。 - 视图解析:支持 JSP、Thymeleaf、FreeMarker 等模板引擎。
- 数据绑定:自动将请求参数绑定到 Java 对象(如
@RequestParam
)。 - REST 支持:通过
@RestController
构建 RESTful API。
- 请求处理:通过
- 典型代码:
@Controller
public class UserController {@GetMapping("/users")public String listUsers(Model model) {model.addAttribute("users", userService.findAll());return "users/list";}
}
3.3 Spring Boot
- 核心功能:
- 自动配置:根据依赖自动配置 Bean(如引入
spring-boot-starter-web
自动配置 Tomcat)。 - 起步依赖:通过
starter
简化依赖管理(如spring-boot-starter-data-jpa
)。 - 内嵌服务器:默认集成 Tomcat/Jetty,无需部署 WAR 文件。
- Actuator:提供应用监控和管理端点(如
/health
)。
- 自动配置:根据依赖自动配置 Bean(如引入
- 典型代码:
@SpringBootApplication
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}
}
4. 协作流程示例
场景:开发一个用户管理的 REST API
- Spring Boot:
- 通过
spring-boot-starter-web
自动配置 Tomcat 和 Spring MVC。 - 使用
@SpringBootApplication
启动应用。
- 通过
- Spring MVC:
- 定义
@RestController
处理/api/users
请求。 - 使用
@GetMapping
和@PostMapping
映射 HTTP 方法。
- 定义
- Spring Framework:
- 通过
@Service
和@Repository
管理业务逻辑和数据访问层。 - 使用
@Transactional
管理数据库事务。
- 通过
代码结构:
// Spring Boot 启动类
@SpringBootApplication
public class Application { ... }// Spring MVC 控制器
@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic List<User> getUsers() { ... }
}// Spring 服务层
@Service
public class UserService {@Autowiredprivate UserRepository userRepo;
}// Spring Data JPA 仓库
public interface UserRepository extends JpaRepository<User, Long> { ... }
5. 如何选择?
需求 | 推荐技术栈 |
---|---|
传统企业级 Web 应用 | Spring + Spring MVC + JSP |
快速开发 RESTful 微服务 | Spring Boot + Spring Web MVC + Spring Data |
需要高度定制化配置 | Spring Framework(手动配置 Bean) |
云原生、容器化部署 | Spring Boot + Docker + Kubernetes |
6. 常见误区
- Spring Boot 替代 Spring?
错误!Spring Boot 是基于 Spring 的扩展工具,核心功能仍依赖 Spring。 - Spring MVC 只能搭配 Spring Boot 使用?
错误!Spring MVC 可以独立用于传统 Spring 项目。
总结:
- Spring 是生态基石,提供核心容器和模块。
- Spring MVC 专注 Web 层开发,构建分层架构。
- Spring Boot 是生产力工具,简化 Spring 应用的全流程开发。