Java学习---Spring及其衍生(下)

        接下来就到了Spring的另外2个知名的衍生框架,SpringBoot和SpringCloud。其中,SpringBoot 是由 Pivotal 团队开发的一个基于 Spring 的框架,它的设计目的是简化 Spring 应用程序的初始搭建和开发过程。SpringBoot 遵循 “约定优于配置” 的原则,减少了大量的 XML 配置和繁琐的依赖管理。​

        SpringBoot 的核心原理主要包括自动配置、起步依赖和嵌入式服务器。其主要的内容如下:

(1)自动配置:SpringBoot 通过 @EnableAutoConfiguration 注解开启自动配置功能。在启动时,SpringBoot 会扫描类路径下的 META-INF/spring.factories 文件,该文件中定义了各种自动配置类。自动配置类会根据类路径下是否存在特定的类来决定是否进行相应的配置,从而实现了自动配置的功能。​

(2)起步依赖:起步依赖是一组预定义的依赖集合,它将常用的依赖打包在一起,开发者只需要引入相应的起步依赖,就可以获得该功能所需的所有依赖,无需手动添加每个依赖,简化了依赖管理。​

(3)嵌入式服务器:SpringBoot 内置了 Tomcat、Jetty、Undertow 等嵌入式服务器,开发者无需单独部署服务器,只需要将应用程序打包成 JAR 文件,就可以直接运行,方便了应用程序的部署和运行。​

        这些核心的作用主要为:​

(1)简化配置:采用 “约定优于配置” 的原则,大大减少了配置文件的数量和复杂度,让开发者可以专注于业务逻辑的开发。​

(2)简化依赖管理:通过起步依赖,简化了项目的依赖管理,避免了因依赖版本冲突而导致的问题。​

(3)内置服务器:方便应用程序的部署和运行,无需额外安装和配置服务器。​

(4)提供生产就绪功能:如健康检查、度量指标、外部化配置等,方便应用程序在生产环境中的监控和管理。​

        作为Spring的衍生,SpringBoot自然也有不少的优点,例如“:

(1)快速开发:简化了 Spring 应用程序的搭建和开发过程,提高了开发效率。​

(2)减少配置:大量的自动配置减少了手动配置的工作量,降低了配置错误的风险。​

(3)易于部署:内置服务器使得应用程序可以直接打包成 JAR 文件运行,方便部署。​

(4)良好的兼容性:与 Spring 框架无缝集成,并且支持各种主流的技术和框架。​

        同时,SpringBoot也有不少的缺点:​

(1)对于简单应用可能过于重量级:如果只是开发一个非常简单的 Web 应用,使用 SpringBoot 可能会引入一些不必要的依赖,增加应用程序的体积。​

(2)自动配置的黑箱性:虽然自动配置简化了配置过程,但当出现配置问题时,排查问题可能比较困难,需要对 SpringBoot 的自动配置原理有深入的了解。​

        SpringCloud 是一系列框架的有序集合,它是基于 SpringBoot,为微服务架构提供了完整的解决方案,包括服务注册与发现、服务熔断与降级、服务网关、配置中心、负载均衡等功能。​

        SpringCloud 各个组件之间相互协作,共同实现微服务架构的功能。以下是几个核心组件的工作原理:​

(1)服务注册与发现:服务提供者在启动时会向注册中心注册自己的服务信息(如服务名称、IP 地址、端口号等);服务消费者在启动时会从注册中心获取服务提供者的服务信息,并缓存到本地。当服务消费者需要调用服务提供者时,会根据本地缓存的服务信息选择合适的服务提供者进行调用。同时,服务提供者会定期向注册中心发送心跳信息,以证明自己的存活状态,如果注册中心在一定时间内没有收到服务提供者的心跳信息,就会将该服务提供者从注册中心中移除。​

(2)负载均衡:当服务消费者需要调用服务提供者时,负载均衡组件会根据一定的负载均衡策略(如轮询、随机、权重等)从多个服务提供者中选择一个进行调用,以实现负载均衡,提高系统的可用性和性能。​

(3)服务熔断与降级:当服务提供者出现故障或响应时间过长时,服务熔断组件会快速失败,避免服务消费者一直等待,从而防止故障的蔓延。服务降级是指当系统负载过高时,为了保证核心功能的正常运行,会将一些非核心功能的服务降级,如返回默认值、提示信息等。​

(4)服务网关:服务网关是微服务架构的入口,所有的外部请求都会经过服务网关。服务网关可以实现路由转发、负载均衡、权限控制、限流、熔断等功能,为微服务架构提供了统一的入口和管理。​

        这些原理的作用主要为:​

(1)实现微服务架构:提供了构建微服务架构所需的各种组件和功能,帮助开发者快速搭建和部署微服务应用程序。​

(2)提高系统的可用性和可靠性:通过服务注册与发现、负载均衡、服务熔断与降级等功能,提高了系统的可用性和可靠性,减少了因单个服务故障而导致整个系统崩溃的风险。​

(3)简化微服务管理:提供了统一的服务管理方式,方便对微服务进行监控、配置、追踪等管理操作。​

(4)支持分布式系统:提供了分布式配置中心、分布式追踪等功能,支持分布式系统的开发和运行。​

        作为Spring衍生的衍生,SpringCloud自然也有许多的优点:

(1)完整的微服务解决方案:提供了构建微服务架构所需的各种组件和功能,满足了微服务架构的各种需求。​

(2)基于 SpringBoot:与 SpringBoot 无缝集成,开发者可以充分利用 SpringBoot 的优势,如快速开发、简化配置等。​

(3)灵活性高:各个组件可以根据实际需求进行选择和组合,满足不同场景的需求。​

(4)社区活跃:拥有庞大的社区支持,不断有新的功能和组件被开发出来,并且有丰富的文档和教程可供参考。​

        而相较于Spring,其学习成本高:SpringCloud 包含的组件较多,每个组件都有其独特的工作原理和使用方法,初学者需要花费大量的时间和精力才能掌握。​同样的,其复杂度也高:微服务架构本身就比较复杂,再加上 SpringCloud 的各种组件,增加了系统的复杂度,提高了系统的设计、开发、测试和维护难度。​且其部署和运维复杂:由于微服务架构包含多个服务,每个服务都需要独立部署和运维,增加了部署和运维的工作量和复杂度。​

​        Spring 与 SpringBoot相比,Spring 只是一个基础框架,提供了核心的 IoC 和 AOP 功能;而SpringBoot 是基于 Spring 的框架,它简化了 Spring 应用程序的搭建和开发过程,通过自动配置和起步依赖减少了配置工作,内置了服务器,方便部署。​

        而SpringBoot 与 SpringCloud相比,SpringCloud 是基于 SpringBoot 的微服务框架,它提供了构建微服务架构所需的各种组件和功能,用于实现多个微服务之间的协作和管理。SpringCloud 依赖于 SpringBoot,它将多个 SpringBoot 应用程序整合起来,形成一个完整的微服务系统。​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90629.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

残月头像阁

残月头像阁 使用说明: 直接上传服务器即可## 项目简介残月头像阁是一个简洁美观的头像网站开源程序 支持快速部署与自定义采用拟态(Neumorphism)设计风格,提供多种分类的头像## 功能特性- 🖼️ 多分类头像展示(男生、女生、卡通、情侣、动漫&…

文献综述AI生成免费工具推荐:高效整理文献

做学术研究时,文献综述无疑是让很多学子和科研工作者头疼的环节。查阅、筛选、梳理大量文献,然后进行归纳总结,最终形成一篇条理清晰的文献综述,这一整个过程常常耗费数日甚至数周。而面对课业压力与紧迫的论文截止时间&#xff0…

OpenCV —— contours_matrix_()_[]

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️…

android 小bug :文件冲突的问题

文章目录前言1、问题:两个文件冲突了2、原因:3、结果:后语前言 一个身份证模块识别的小bug,记录一下,这应该是第三次出现,每次出现都不太记得,还是得记录,不然都是重复检索的过程。…

Java学习第七十三部分——Redis

目录 一、前言提要 二、核心特性 三、数据结构 四、应用场景 五、架构模式 六、性能优势 七、客户端库 八、注意事项 九、选择建议 十、使用示例——基于Jedis 和 Lettuce 十一、生态集成——基于Spring Boot 十二、企业级能力 十三、持久化机制 十四、高…

(LeetCode 每日一题) 3487. 删除后的最大子数组元素和 (哈希表)

题目:3487. 删除后的最大子数组元素和 思路:哈希表,时间复杂度0(n)。 维护数组nums的最大值mx,同时用哈希表mp维护数组中非负数出现的情况,记录非负数的和sum。如果哈希表mp的大小为0,那么数组nums都是负数…

C 语言输入输出 (I/O)

C 语言输出在C语言编程中&#xff0c;printf()是主要的输出函数之一。该函数将格式化的输出发送到屏幕。例如&#xff0c;示例1&#xff1a;C 语言输出#include <stdio.h>int main (int argc, char* argv) {printf("Hello world\n");return 0; }输出结果C Prog…

分布式系统中的缓存设计与应用

引言 缓存是分布式系统中的重要组件&#xff0c;主要解决高并发&#xff0c;大数据场景下&#xff0c;热点数据访问的性能问题。提供高性能的数据快速访问。 本文是缓存在分布式应用第一篇文章&#xff0c;介绍缓存的原理&#xff0c;缓存的分类&#xff0c;缓存的设计&#xf…

智能机器人的技术革命:从感知到决策的全栈架构解析

——基于多模态大模型的下一代机器人系统设计引言&#xff1a;机器人技术的范式迁移当波士顿动力的Atlas完成后空翻时&#xff0c;全球见证了机器人运动控制的巅峰&#xff1b;但当Figure 01通过大模型理解人类模糊指令并自主执行任务时&#xff0c;我们正见证机器人认知智能的…

day20 双向链表

双向链表的函数功能注意事项 1.双向链表还需要关注到前指针的指向2.函数都需要判断逻辑3.函数的增删都要关注到len的变化4.函数的改查功能都需要遍历结束的标志NULL5.注意p->next->prio时&#xff0c;p->next是否指向NULL创建双向链表头节点Node_ptr list_create()函数…

[Rust 基础课程]猜数字游戏-获取用户输入并打印

创建项目 按照之前的章节讲的创建一个 Cargo 项目的方法&#xff0c;自己创建一个名为 guessing_game 的 cargo 项目并执行&#xff0c;确保能成功打印出 Hello World。 编写代码 使用 RustRover 打开项目&#xff0c;打开 src/main.rs 文件&#xff0c;我们将在这个文件中编写…

重读《人件》Peopleware -(22)Ⅲ 适当人选 Ⅵ 乐在其中(上)

本章以一个小测验开始&#xff1a;问题1&#xff1a;在过去几年里&#xff0c;你们组织的年员工流失率是多少&#xff1f; 问题2&#xff1a;替换一个离职员工平均需要多少成本&#xff1f;评分标准如下&#xff1a;如果你对这两个问题有任何答案&#xff0c;则通过&#xff1b…

Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡

Go、Node.js、Python、PHP、Java五种语言的直播推流RTMP协议技术实施方案和思路-优雅草卓伊凡既然我们甲方要做直播私有化&#xff0c;既然我们做了这么多年系统&#xff0c;我们对直播的理解很深&#xff0c;那么我们2025年就应该用更先进的技术栈&#xff0c;不然怎么让我们的…

SpringBoot 集成Mybatis Plus

一、为什么SpringBoot不推荐使用MybatisSpring Boot 不推荐使用 MyBatis&#xff0c;主要源于二者在设计理念、生态融合和开发风格上的差异。Spring Boot 强调“约定优于配置”&#xff0c;追求高效的开发体验和统一的框架风格。它通过自动配置和依赖注入&#xff0c;将复杂的基…

PI 思维升级 PI设计的典范转移:从阻抗思维到谐振控制

们先来回想一件事&#xff0c;根据欧姆定律&#xff0c;阻抗是不是越低越好&#xff1f; 代表即使有很大的瞬时电流&#xff0c;瞬间的电压降也不会超过某个极限&#xff01;理论上是&#xff01; 可是这其实忽略了两个关键的要素&#xff1a;PDN阻抗有谐振&#xff1a;谐振代表…

如何制定企业级服务器安全策略(Security Policy)

制定一套**企业级服务器安全策略&#xff08;Security Policy&#xff09;**对于保护服务器资源、数据安全和业务连续性至关重要。以下是制定安全策略的详细指南&#xff0c;包括安全策略的核心要素、实施步骤和具体措施&#xff0c;帮助企业构建全面的服务器安全防护体系。1. …

n1 armbian docker compose 部署aipan mysql

apt update apt install docker-compose-plugin -y #安装docker compose docker compose version Docker Compose version v2.38.2 sudo mkdir -p /sda1/data/mysql/conf.d sudo chown -R 999:999 /sda1/data/mysql # MySQL 用户 UID 通常为 999 cat docker-compose.yml vers…

RAG情境化分段向量模型voyage-context-3,聚焦分段细节,融入全局文档上下文

最近看到一个有意思的工作&#xff0c;原文来自&#xff1a; https://blog.voyageai.com/2025/07/23/voyage-context-3/?utm_sourceTWITTER&utm_mediumORGANIC_SOCIAL voyage-context-3&#xff1a;聚焦分段细节&#xff0c;融入全局文档上下文 概要&#xff1a; Voyage A…

计算机体系结构中的中断服务程序ISR是什么?

计算机体系结构中的中断服务程序ISR是什么&#xff1f; 在计算机体系结构中&#xff0c;中断服务程序&#xff08;Interrupt Service Routine, ISR&#xff09; 是操作系统或硬件直接调用的关键代码模块&#xff0c;用于响应来自硬件设备、软件异常或系统事件的中断信号。其核心…