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应用(单体或微服务) 构建微服务架构的分布式系统
比喻 建筑设计图 快速启动工具箱 城市规划办公室
相关推荐
q***04631 小时前
【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
java·spring boot·spring
稚辉君.MCA_P8_Java1 小时前
Sqoop 实现的功能是什么
java·服务器·架构·kubernetes·sqoop
w***4811 小时前
【Spring】IDEA中创建Spring项目
java·spring·intellij-idea
Thexhy2 小时前
Java大模型后端开发全流程指南
java·ai·大模型
從南走到北2 小时前
JAVA同城服务场馆预约门店预约健身房瑜伽馆预约系统支持H5小程序APP源码
java·开发语言·小程序
韩立学长2 小时前
【开题答辩实录分享】以《智慧农业信息化服务平台小程序》为例进行答辩实录分享
数据库·spring boot·小程序
爱学的小码2 小时前
JavaEE初阶——多线程3(案例)
java·开发语言·单例模式·java-ee
جيون داد ناالام ميづ2 小时前
Spring Boot 核心原理(五):配置管理怎么玩?从基础到多环境再到配置中心
java·spring boot·后端
一 乐3 小时前
农产品电商|基于SprinBoot+vue的农产品电商系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot