SpringBoot/SpringMvc/SpringCloud

在理解这三者之前,必须先知道 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. 构造函数注入
java 复制代码
@Component
public class OrderService {
    private final UserService userService;
    // 容器通过调用这个构造函数来注入UserService
    public OrderService(UserService userService) {
        this.userService = userService;
    }
}
  1. Setter方法注入
java 复制代码
@Component
public class OrderService {
    private UserService userService;
    // 容器通过调用这个setter方法来注入UserService
    @Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
}
  1. 字段注入(常见)
java 复制代码
@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应用(单体或微服务) 构建微服务架构的分布式系统
比喻 建筑设计图 快速启动工具箱 城市规划办公室
相关推荐
编程修仙1 分钟前
第十篇 文件上传
spring boot·spring
zhangyifang_0092 分钟前
Spring中的BeanDefinition
java·后端·spring
不会代码的小猴8 分钟前
C++的第十四天笔记
java·开发语言
Heavydrink11 分钟前
Java项目部署云服务器详细教程
java·服务器·开发语言
楠枬12 分钟前
负载均衡 -LoadBalance
后端·spring·spring cloud·负载均衡
milanyangbo12 分钟前
深入解析 Disruptor:从RingBuffer到缓存行填充的底层魔法
java·数据库·后端·架构
yaoxin52112312 分钟前
266. Java 集合 - ArrayList vs LinkedList 内存使用深度剖析
java·开发语言
没有bug.的程序员19 分钟前
云原生 + JIT:冷启动与预热优化
java·jvm·云原生·日志·gc·jit
risc12345624 分钟前
【备忘录】java.lang.Throwable#addSuppressed这个是干嘛的?
java·开发语言
__万波__25 分钟前
二十三种设计模式(十)--外观模式
java·设计模式·外观模式