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应用(单体或微服务) 构建微服务架构的分布式系统
比喻 建筑设计图 快速启动工具箱 城市规划办公室
相关推荐
学编程就要猛6 分钟前
使用Spring AI配置聊天大模型实现人机交互(初阶)
java·spring ai·advisor·chatclient·chatmodel
Dreams_l15 分钟前
RabbitMQ在SpringBoot中的应用
spring boot·rabbitmq·java-rabbitmq
代码不停16 分钟前
子序列问题
java·算法
计算机学姐23 分钟前
基于SpringBoot的高校爱心慈善管理系统
java·vue.js·spring boot·后端·spring·tomcat·mybatis
vx+_bysj686935 分钟前
springboot 旅行小程序97353
spring boot·后端·小程序·旅行小程序
大梦想家a36 分钟前
基于Servlet+JSP的小区物业管理系统设计与实现(Bootstrap+MySQL)
java·servlet·bootstrap
都叫我大帅哥1 小时前
Apache Tika 4.0 正式发布:RAG 时代文件解析的终极答案
java·spring boot·spring
大梦想家a2 小时前
基于 Spring Boot 的物流运单管理系统后端设计与实现(JWT + MyBatis-Plus + MySQL)
spring boot·mysql·mybatis
ZYJCSZKJ3 小时前
基于地理位置围栏的短视频POI团购系统:LBS空间索引与流量分发实践
java·服务器·数据库
mldong9 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构