在理解这三者之前,必须先知道 Spring 本身。Spring是整个生态系统的基石,它的核心是 依赖注入(DI) 和 面向切面编程(AOP).
Inversion of Control(控制反转)
控制反转(IoC)是一种设计原则和思想,而依赖注入(DI)是实现这种思想的最主要的技术模式。
你可以把它们理解为 “目标”与“手段” 的关系。
目标: 实现控制反转(IoC)。
手段: 通过依赖注入(DI)这种方式。
控制反转(Inversion of Control - IoC):
在没有IoC的传统程序中,当你需要一个依赖(比如一个Service对象)时,你会自己主动去创建它(new 一个对象)。你是程序的掌控者。在IoC模式下,这个控制权被“反转”了。你不再自己创建依赖,而是由一个外部的容器(比如Spring IoC容器) 来负责创建和注入你所需要的依赖。你从主动变成了被动接收。
依赖注入(Dependency Injection - DI):
依赖注入就是实现控制反转思想的一种具体技术模式。它描述了“外部容器”是如何将依赖“注入”到对象中的。
关键点: 对象只通过接口来表明它需要什么依赖,而不关心这个依赖从哪里来、如何被创建。容器负责找到这个依赖的具体实现,并在对象创建时“注入”给它。
1. 构造函数注入
@Component
public class OrderService {
private final UserService userService;
// 容器通过调用这个构造函数来注入UserService
public OrderService(UserService userService) {
this.userService = userService;
}
}
2. Setter方法注入
@Component
public class OrderService {
private UserService userService;
// 容器通过调用这个setter方法来注入UserService
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
}
3. 字段注入(常见)
@Component
public class OrderService {
@Autowired // 容器通过反射直接设置这个字段
private UserService userService;
}
SpringMVC
Spring MVC 是 Spring 框架中的一个模块,专门用来 构建 Web 应用程序。
定位:Web 应用架构
解决什么问题:如何优雅地处理HTTP请求、响应、参数绑定、数据验证、视图渲染等Web层问题。
核心组件:
DispatcherServlet (前端控制器):整个流程的核心,负责调度。
Controller (控制器):处理具体业务逻辑。
ViewResolver (视图解析器):解析视图(如JSP, Thymeleaf)。
与Spring关系:Spring MVC 是 Spring 在 Web 领域的一个具体实现和扩展。它依赖于Spring核心的IOC容器。
SpringBoot
Spring Boot 的诞生是为了 简化 Spring 应用的初始搭建和开发过程。
定位:快速应用开发框架
解决什么问题:
简化配置:告别繁琐的XML配置,推崇“约定优于配置”。
快速启动:内嵌了Tomcat、Jetty等Web服务器,让你的应用可以直接打包成一个可执行的JAR文件。
自动装配:通过
@EnableAutoConfiguration等注解,自动配置Spring和第三方库。
与Spring/SpringMVC关系:
Spring Boot 并不替代 Spring 或 Spring MVC。
它是在 Spring 之上 的一个“加速器”,让你能更轻松地创建一个基于Spring(可以包含Spring MVC)的独立、生产级的应用程序。
你可以在Spring Boot项目里完美地使用Spring MVC来构建Web层。
SpringCloud
Spring Cloud 是一套用于构建分布式系统和微服务架构的工具箱。
定位:分布式/微服务架构解决方案
解决什么问题:当你的应用从一个单体应用拆分成多个微服务后,会面临一系列新问题:
服务发现与注册:服务之间如何找到对方?(Eureka, Nacos)
配置管理:如何集中管理所有微服务的配置?(Config Server, Nacos)
负载均衡:如何将请求分摊到多个服务实例上?(Ribbon, LoadBalancer)
熔断与降级:某个服务故障时,如何避免整个系统雪崩?(Hystrix, Sentinel)
API网关:如何统一管理所有对外的API入口?(Zuul, Gateway)
与Spring Boot关系:
Spring Cloud 强烈依赖于 Spring Boot。
每个微服务本身就是一个独立的Spring Boot应用程序。
Spring Boot的快速开发、内嵌服务器和简化配置的特性,使得创建和部署一个个微服务变得非常容易。
三者比较
| 特性 | Spring MVC | Spring Boot | Spring Cloud |
|---|---|---|---|
| 核心定位 | Web MVC 框架 | 快速应用开发框架 | 分布式系统工具箱 |
| 解决问题 | 如何构建Web层 | 如何简化Spring应用配置和部署 | 如何管理微服务集群(服务发现、配置等) |
| 关系 | Spring 的一个模块 | Spring 的上层扩展和加速器 | Spring Boot 的上层扩展和组合器 |
| 配置方式 | 大量XML或Java配置 | 约定优于配置,自动配置 | 基于Spring Boot的配置方式 |
| 适用场景 | 传统单体Web应用 | 快速构建任何类型的Spring应用(单体或微服务) | 构建微服务架构的分布式系统 |
| 比喻 | 建筑设计图 | 快速启动工具箱 | 城市规划办公室 |
浙公网安备 33010602011771号