当前位置: 首页 > news >正文

spring cloud 跨服务调用

微服务将不同功能模块拆分成多个不同的服务,在业务逻辑集成时候,难免会有一个服务需要依赖调用另一个服务的情况。如订单服务需要通过用户服务查询用户相关信息,这时候微服务之间就需要进行跨服务调用。

要想进行跨服务调用,服务之间需要一种能够找到彼此的方式。这个时候就是通过前面文章介绍的注册中心。服务实例启动后会将自己的网络位置(主机和端口)注册到服务发现服务器上(注册中心),而其他服务可以通过注册中心找到它们需要调用的可用服务实例列表。服务的注册需要在启动类上添加@EnableDiscoveryClient注解来完成,这里以nacos作为注册中心不在过多赘述,前面文章已经说过。

当一个服务的多个实例运行时,你需要将流量分配到这些实例上,以确保高可用性并防止任何单个实例过载。Spring Cloud LoadBalancer提供了客户端负载均衡的功能。

Spring 提供了 RestTemplate(阻塞式)和 WebClient(非阻塞式、响应式)用于发起 HTTP 调用。当与 Spring Cloud LoadBalancer 结合使用时,这些客户端可以使用服务名称(而不是硬编码的 URL),负载均衡器会自动将服务名称解析为可用的实例。

假设这里已经有一个系统服务,注册服务名称为:system-service,有一个接口 /sys/params 可以获取系统配置参数,另一个服务需要跨服务调用该接口

RestTemplate方式

    @Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}@GetMapping("/call-service")public String callService() {String response = restTemplate.restTemplate.getForObject("http://system-service/sys/params", String.class);return "来自服务的响应: " + response;}

使用RestTemplate跨服务调用,RestTemplate上的@LoadBalanced 注解启用了客户端负载均衡,需要添加LoadBalance依赖spring-cloud-starter-loadbalancer,http://服务名/*** 服务名会自动替换成对应的注册的服务

WebClient方式

    @Bean@LoadBalancedpublic WebClient webClient(){return WebClient.create();}/**bodyValue()方法可以设置请求body,header()方法可以设置请求头.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)*/@GetMapping("/call-service")public String callService() {Mono<String> monos = webClient.post().uri("http://system-service/sys/params").retrieve().bodyToMono(String.class);return "来自服务的响应: " + response;}

WebClient是Spring 5 中引入的非阻塞、响应式 HTTP 客户端,属于 Spring WebFlux 框架的一部分。使用WebClient跨服务调用,除了依赖loadbalance,还需要添加依赖:spring-boot-starter-webflux用来支持非阻塞方式调用。WebClient采用函数式、流式 (Fluent) 的 API 来构建 HTTP 请求。基于 Reactor 库实现,非常适合构建高并发、响应式的应用。

但是WebClient不是声明式的。需要使用其 API 显式地构建请求的各个部分(URI, method, headers, body 等)。

Feign

feign是声明式的 HTTP 客户端绑定器。它的目标是让编写 Web 服务客户端更加简单。通过接口和注解来定义 HTTP 客户端。你只需要声明你需要调用的远程 API 接口,并使用注解(如 @GetMapping, @PostMapping, @RequestParam, @PathVariable 等,与 Spring MVC 的注解类似)来描述请求的细节。Feign 会在运行时动态地生成实现代码。你只需要定义接口,Feign 会帮你处理底层的 HTTP 通信。

首先需要引入依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

然后在启动类上添加@EnableFeignClients注解开启openfeign支持。

下一步需要定义跨服务调用的接口,跨服务调用的接口需要使用@FeignClient注解修饰。

如下:

@FeignClient(value = "system-service",qualifiers = "systemClient")
public interface SystemClient {@RequestMapping("/sys/params")public String getSysParams();
}

接口定义包路径要@EnableFeignClients注解能够扫描到,可以通过@EnableFeignClients(basePackage=“”)来指定扫描的基础包路径。

@FeignClient 注解默认生成bean的name是当前接口的全路径名,可以从spring容器中获取。注解的value值是可用服务名,要和注册中心注册的服务名保持一致,这样会创建一个loadbalance的服务进行调用,所以这里如果要调用注册中心注册的微服务,一个是要添加注册中心discovery,另一个是添加依赖starter-loadbalance。

loadbalance依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

@FeignClient 修饰的接口类,其接口方法可以通过spring mvc的@RequestMapping注解进行修饰,用来与被调用的服务地址进行匹配对应。如上面定义的接口方法@RequestMapping(“/sys/params”)会和@FeignClient指定的服务名组合。调用SystemClient.getSysParams()方法相当于调用:lb://system-service/sys/params服务。开始也说了@FeignClient标注的同时也会生成一个spring的bean,在使用的地方进行自动注入即可。

@FeignClient还可以指定url属性,如果指定了url属性(服务接口地址),则可以直接调用注册中心以外的服务,不需要在注册中心注册该服务。

熔断降级:

当调用后端服务异常失败时,可以通过在@FeignClient 指定callback进行处理。

相关文章:

spring cloud 跨服务调用

微服务将不同功能模块拆分成多个不同的服务&#xff0c;在业务逻辑集成时候&#xff0c;难免会有一个服务需要依赖调用另一个服务的情况。如订单服务需要通过用户服务查询用户相关信息&#xff0c;这时候微服务之间就需要进行跨服务调用。 要想进行跨服务调用&#xff0c;服务…...

手机隐私数据彻底删除工具:回收或弃用手机前防数据恢复

软件介绍 有这样一款由吾爱网友chenwangjun 原创开发的数据处理软件&#xff0c;名为 AndroidDiskClear。它的核心功能十分强大&#xff0c;能够将你手机里已经删除的各类文件&#xff0c;像图片、普通文件、文字信息等彻底清除干净&#xff0c;有效杜绝数据恢复类软件的二次恢…...

【Electron】electron-vue 借助 element-ui UI 库助力桌面应用开发

前面文章我们讲过 electron 让可以用 HTML、JS、CSS 开发桌面应用程序。而 electron-vue 是一个结合了 electron 与 vue 的套件。这样我们就能方便地使用 vue 快速开发桌面应用。但是&#xff0c;vue 只是在 js 这层面做了大量的便捷的操作。对 UI 并未过多涉及。此时如果您在开…...

《信息论与编码课程笔记》——信源编码(1)

目录 一、信源编码基本概念 1. 定义与目的 2. 编码示例 3. 编码分类 4. 唯一可译码的判断标准 5. 编码评价指标 二、香农第一定理&#xff08;无失真可变长信源编码定理&#xff09; 1. 核心内容 2. 关键概念与指标 3. 数据压缩的本质 4. 例子与启示 5. 定理的意义…...

2022年8月,​韩先超对中移信息进行微服务架构原理(Docker+k8s+DevOps+Go等)培训

2022年8月&#xff0c;​韩先超对中移信息进行微服务架构原理&#xff08;Dockerk8sDevOpsGo等&#xff09;培训 2022年8月&#xff0c;在企业数字化转型和云原生架构加速演进的背景下&#xff0c; 中移信息技术有限公司特别邀请云原生与DevOps领域专家 韩先超老师&#xff0c…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】8.4 数据故事化呈现(报告结构设计/业务价值提炼)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 8.4 数据故事化呈现&#xff1a;从报告结构到业务价值的深度融合一、数据故事化的核心价值体系&#xff08;一&#xff09;报告结构设计的黄金框架1. 业务场景锚定&#xff…...

Docker 核心目录结构

1. Docker 核心目录结构 数据存储目录 默认根目录&#xff1a;/var/lib/docker Docker 所有运行时数据&#xff08;镜像、容器、卷、网络配置等&#xff09;的默认存储位置。 bash 复制 下载 # 查看 Docker 数据根目录 docker info | grep "Docker Root Dir" # 输出…...

【工具推荐】Code2Prompt

DeepWiki工具可以帮我们快速理解 GitHub 项目&#xff0c;简直是理解陌生开源项目的利器&#xff01; 但是&#xff0c;它有个小小的“遗憾”——只能解析在线的 GitHub 项目。 如果是本地项目怎么办&#xff0c;还要特意上传&#xff0c;no&#xff0c;code2prompt 就是一款…...

OpenCV定位地板上的书

任务目标是将下面的图片中的书本找出来&#xff1a; 使用到的技术包括&#xff1a;转灰度图、提取颜色分量、二值化、形态学、轮廓提取等。 我们尝试先把图片转为灰度图&#xff0c;然后二值化&#xff0c;看看效果&#xff1a; 可以看到&#xff0c;二值化后&#xff0c;书的…...

Spring Cloud:概述,服务注册和服务发现,多机部署和负载均衡

什么是微服务 就是将一个大型的应用程序拆分成多而小的独立的服务模块&#xff0c;每个服务模块围绕某个业务功能建立&#xff0c;具有独立的数据库&#xff0c;服务栈&#xff0c;并通过轻量级的通信协议进行交互。 单体架构 就是将所有的业务和功能都打包在一个jar包中&…...

Linux的基础开发工具

目录 前言&#xff1a; 1、包管理器yum 1.1 软件包的依赖 1.2 镜像源 1.3 查找/安装/卸载软件 2、编辑器vim 2.1 命令模式(默认) 2.1.1 撤销与反撤销 2.1.2 光标定位 2.1.3 复制&&剪切(删除)&&粘贴 2.1.4 替换 2.1.5 插入模式 2.1.6 V-Block模式 …...

解锁跨平台开发的新时代——Compose Multiplatform

解锁跨平台开发的新时代——Compose Multiplatform 在当今移动和桌面应用程序开发领域,跨平台解决方案是开发者们梦寐以求的工具。而由JetBrains打造的Compose Multiplatform正是这样一款现代UI框架,它基于Kotlin技术,为开发者构建高性能且美观的用户界面提供了极大的便利和…...

键盘固件刷写详解:Bootloader

键盘固件刷写详解&#xff1a;从入门到精通 引言 作为一名机械键盘爱好者&#xff0c;相信大家都曾经面临过刷写固件的问题。无论是想要自定义按键功能&#xff0c;还是升级键盘的固件&#xff0c;掌握刷写技巧都是非常必要的。本文将全面介绍不同类型的引导加载程序&#xf…...

网络原理初识

本来想从网络的发展史开始写,之后再写网络的定义啥的,但快写完了才发现,这不课本教材吗,没劲,遂弃之,重撰,删芜就简.写点我认为,对程序员来说真正有用的东西 目录 IP地址 概念 格式 特殊地址 端口号 概念 格式 协议 概念 知名协议的默认端口 五元组 协议分层 OS…...

PVP鼠标推荐(deepseek)

下面有不懂的自行百度查找&#x1f44d; ❤️ 以下是几款在 双击性能&#xff08;DBC&#xff09; 和 拖拽点击&#xff08;DC&#xff09; 方面表现优秀的游戏鼠标推荐&#xff0c;结合了硬件性能、微动寿命以及玩家口碑&#xff1a; 1. 罗技 G102/G203 Lightsync 特点&#…...

Navee滑板车强势登陆中国,以智能科技重塑城市出行新风尚

当科技与潮流邂逅&#xff0c;城市出行迎来了一场前所未有的变革。全球智能出行领域的先锋品牌Navee&#xff0c;携其多款旗舰滑板车产品——ST3、GT3、V系列等&#xff0c;正式进军中国市场。凭借“颜值、性能、安全、智能”四大核心优势&#xff0c;Navee正以破竹之势重新定义…...

【Linux网络】网络命令

Ping Ping命令是一种用于测试网络连接状况的工具&#xff0c;在Windows、Linux、macOS等操作系统中都可以使用。以下是其详细介绍&#xff1a; 它主要通过向目标主机发送Internet控制报文协议&#xff08;ICMP&#xff09;的回声请求&#xff08;Echo Request&#xff09;数据…...

【JS逆向基础】面向对象

1&#xff0c;OOP编程思想 面向对象编程是在面向过程编程的基础上发展来的&#xff0c;它比面向过程编程具有更强的灵活性和扩展性。面向对象编程是程序员发展的分水岭&#xff0c;很多初学者会因无法理解面向对象而放弃学习编程。 面向对象编程(Obiect:oriented Programming…...

# 如何使用OpenCV进行发票的透视变换和二值化处理

如何使用OpenCV进行发票的透视变换和二值化处理 引言 在自动化处理发票和其他文档时&#xff0c;图像预处理是一个关键步骤&#xff0c;它可以帮助提高OCR&#xff08;光学字符识别&#xff09;的准确性。透视变换用于校正图像中的透视失真&#xff0c;而二值化处理则可以简化…...

NetSuite 如何得到所有Item最近一次采购订单的货品单价?

我们知道&#xff0c;如果取Item主数据的数据&#xff0c;得到的是很多相关transaction的Item 货品平均价值&#xff1b;如果只想得到最近一次采购订单上的采购单价&#xff0c;主数据上应该无法直接得到&#xff0c;那该如何处理&#xff1f;我们可以利用Saved Search来拉取相…...

[5-2] 对射式红外传感器计次旋转编码器计次 江协科技学习笔记(38个知识点)

1、 2、 3、这些缩写通常出现在嵌入式系统或微控制器的上下文中&#xff0c;它们各自有不同的功能&#xff1a; • RCC&#xff1a;Reset and Clock Control&#xff08;复位和时钟控制&#xff09;。它负责管理微控制器的时钟系统&#xff0c;包括时钟源的选择、时钟频率的设置…...

阿里云 golang 一面

消息队列 分布式文件系统 Linux的虚拟网络设备 TCP SSL/TLS 场景&#xff1a;对于打车场景&#xff0c;如何设计一个系统来处理并发打车请求&#xff1f; 设计一个处理并发打车请求的系统需要考虑多个方面&#xff0c;包括系统架构、数据存储、负载均衡和实时性。以下是一个基…...

【C++ Qt】多元素控件(ListWidget、TableWidget、TreeWidget)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章将通过代码示例详细介绍了Qt中QListWidget、QTableWidget和QTreeWidget三种多元素控件的使用方法与核心功能&#xff0c;涵盖列表的增删操作、表格…...

排序算法-冒泡排序

冒泡排序一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排序完成。 这个算法的名字由来是因为元素会经由交换慢…...

C++ 工具链与开发实践:构建安全、高效与创新的开发生态

引言 在 C 的技术演进中&#xff0c;工具链的革新与开发实践的迭代始终是推动语言生命力的核心动力。从内存安全的攻防体系到嵌入式设备的能效优化&#xff0c;从跨平台开发的降本增效到开发者社区的生态构建&#xff0c;C 正通过工具链与方法论的双重升级&#xff0c;应对复杂…...

uni-pages-hot-modules插件:uni-app的pages.json的模块化及模块热重载

uni-pages-hot-modules uni-app的pages.json的模块化及模块热重载 uni-app的pages.json的模块化及模块热重载 解决uni-app的pages.json无法模块化的问题,并且解决模块热重载和缓存的问题 安装 npm i uni-pages-hot-modules -Suni-app vite版本(vue3)示例项目 uni-app webpa…...

【WEB3】区块链、隐私计算、AI和Web3.0——数据民主化(1)

区块链、隐私计算、AI&#xff0c;是未来Web3.0至关重要的三项技术。 1.数据民主化问题 数据在整个生命周期&#xff08;生产、传输、处理、存储&#xff09;内的隐私安全&#xff0c;则是Web3.0在初始阶段首要解决的问题。 数据民主化旨在打破数据垄断&#xff0c;让个体能…...

从0到1:用Lask/Django框架搭建个人博客系统(4/10)

摘要&#xff1a;本文深入解析了使用Lask和Django构建个人博客系统的全过程。从技术选型的考量&#xff0c;突出Lask的轻量灵活与Django的强大功能&#xff0c;到开发环境搭建、项目初始化&#xff0c;再到核心功能实现如文章管理、用户认证与权限控制&#xff0c;详细阐述了开…...

探索 C++23 的 views::cartesian_product

文章目录 一、背景与动机二、基本概念与语法三、使用示例四、特点与优势五、性能与优化六、与 P2374R4 的关系七、编译器支持八、总结 C23 为我们带来了一系列令人兴奋的新特性&#xff0c;其中 views::cartesian_product 是一个非常实用且强大的功能&#xff0c;它允许我们轻…...

微软拼音自定义词库方法

1.准备文件input.txt 令狐冲 郭靖2.使用python转成微软拼音需要的格式 from xpinyin import Pinyin # pip install xpinyin -i https://pypi.tuna.tsinghua.edu.cn/simplep Pinyin()with open(input.txt, r, encodingutf-8) as infile:with open(output.txt, w, encodingutf…...

SQLite3常用语句汇总

SQLite 命令行工具&#xff08;sqlite3 shell&#xff09; 中的内置命令 命令作用说明.open filename.db打开或创建一个 SQLite 数据库文件.tables列出当前数据库中的所有表.schema [table]查看某个表或所有表的建表语句&#xff08;DDL&#xff09;.headers ON/OFF开启或关闭…...

数据库设计三范式

第一范式 (1NF) 每个表中的每一列都是原子值 每个表中的每一行都是唯一的 下面这个表格就是不符合第一范式的例子&#xff1a;因为学时数能够拆分为讲课和实验。所以他并不是每一列都是原子值。 不仅要考虑列是否是原子值&#xff0c;还需要考虑每列的值是否可拆分。 第二范…...

GoWeb开发

学习目标&#xff1a; 本篇要达到的目的&#xff0c;能为后续复习提供极大便利。 &#xff08;当我写下本篇博客时&#xff0c;已复习3遍&#xff09; 一、网络通信概述 &#xff08;为本篇基础核心内容&#xff09; 1、什么是网络通信&#xff1f; 网络通信是指不同设备&…...

(7)Nokov 室内光学跟踪系统

文章目录 前言 7.1 所需硬件 7.2 Nokov 系统设置 7.3 配置旋翼机 7.4 启动 Nokov 模块 7.5 MAVProxy 准备 7.6 测试飞行 7.7 参数说明 前言 本文将介绍如何通过 Nokov 运动捕捉系统向旋翼机传输姿势信息。联系方式&#xff1a;NOKOV | Optical Motion Capture System。…...

Linux Shell编程和循环语句

一.for循环语句 1.for语句的结构2.for循环语句实例①根据姓名列表来批量创建多个用户②根据IP地址列表检查主机状态 二.使用while循环语句1.while语句结构2.while循环语句应用①批量添加规律编号用户②猜价格游戏 三 until循环语句1.until语句结构① 计算1-50的和 1.for语句的结…...

Java后端程序员学习前端之JavaScript

1.什么是JavaScript 1.1.概述 JavaScript是一门世界上最流行的脚本语言javaScript 一个合格的后端人员&#xff0c;必须要精通JavaScript 1.2.历史 JavaScript的起源故事-CSDN博客 2.快速入门 2.1.引入JavaScript 1.内部标签 <script>//.......</script> --…...

redis多路复用IO模型 以及 6.0引入的多线程模型

redis为什么选择单线程 采用多线程的话&#xff0c;会出现上下文切换的开销采用多线程&#xff0c;会带来共享资源的竞争控制&#xff0c;比如多个线程同时访问同一个资源&#xff08;键值&#xff09;时&#xff0c;需要额外的手段来保障共享资源的正确性&#xff0c;会带来额…...

101alpha_第6个

第6个alpha (-1 * correlation(open, volume, 10)) 这个就是看这两个相似性。10天之内的 如果结果为正且数值较大&#xff0c;投资者可能会认为在开盘价上涨时成交量萎缩&#xff0c;市场上涨动力不足&#xff0c;可能是卖出信号&#xff1b;反之&#xff0c;开盘价下跌时成交…...

crawl4ai能替代scrapy等传统爬虫框架吗?

传统爬虫框架就像拿着渔网在数字海洋中捕鱼——虽然能捞到东西&#xff0c;但面对现代网站的复杂性时常常"漏网之鱼"满天飞。以Scrapy为代表的工具存在三大致命短板&#xff1a;首先是JavaScript盲区&#xff0c;对动态渲染内容束手无策&#xff0c;就像试图用收音机…...

Sui Basecamp 2025 全栈出击

“我们不仅仅是在构建一个 L1&#xff0c;我们是在重建互联网。” — — Mysten Labs 首席产品官 Adeniyi Abiodun 本届 Sui Basecamp 汇聚了 Web3 领域的建设者、合作伙伴和思想领袖&#xff0c;为期两天&#xff0c;不仅展示了 Sui 的未来&#xff0c;也展现了去中心化互联网…...

计算机体系架构-----设计模式:状态模式(从程序员加班问题切入)

文章目录 1.梦开始的地方2.代码1.0版本3.代码2.0版本4.代码3.0版本5.梦结束的地方 最近在学习这个专业课里面的体系结构这门课程&#xff0c;作为专业里面的一门基础课&#xff0c;这个课程里面主要讲解的就是软件的设计思想&#xff0c;一些历程之类的&#xff0c;包括了面向对…...

【C/C++】RPC与线程间通信:高效设计的关键选择

文章目录 RPC与线程间通信&#xff1a;高效设计的关键选择1 RPC 的核心用途2 线程间通信的常规方法3 RPC 用于线程间通信的潜在意义4 主要缺点与限制4.1 缺点列表4.2 展开 5 替代方案6 结论 RPC与线程间通信&#xff1a;高效设计的关键选择 在C或分布式系统设计中&#xff0c;…...

数据结构之串

一、串的定义与基本概念 1. 串的定义 定义&#xff1a;串是由零个或多个字符组成的有限序列&#xff0c;记作 s"a1​a2​…an​"&#xff0c;例如 "data structure"、"123" 等。 空串&#xff1a;无任何字符&#xff0c;长度为 0&#xff0c;…...

基于腾讯云MCP广场的AI自动化实践:爬取小红书热门话题

基于腾讯云MCP广场的AI自动化实践&#xff1a;爬取小红书热门话题 我正在参加Trae「超级体验官」创意实践征文&#xff0c;本文所使用的 Trae 免费下载链接&#xff1a;www.trae.com.cn/?utm_source… &#x1f50e; 背景 在人工智能快速发展的时代&#xff0c;AI技术不仅重…...

AI领域的MCP(Model-Centric Paradigm)

1. 什么是MCP&#xff08;Model-Centric Paradigm&#xff09;&#xff1f; MCP&#xff08;Model-Centric Paradigm&#xff09;是人工智能开发中的一种核心理念&#xff0c;强调以模型的优化与改进作为主要驱动因素来提升AI系统的表现。在MCP模式下&#xff0c;开发者专注于…...

裸辞8年前端的面试笔记——JavaScript篇(一)

裸辞后的第二个月开始准备找工作&#xff0c;今天是第三天目前还没有面试&#xff0c;现在的行情是一言难尽&#xff0c;都在疯狂的压价。 下边是今天复习的个人笔记 一、事件循环 JavaScript 的事件循环&#xff08;Event Loop&#xff09;是其实现异步编程的关键机制。 从…...

力扣刷题Day 41:除自身以外数组的乘积(238)

1.题目描述 2.思路 方法1&#xff1a;搞一个数组存放各元素之前所有数的乘积&#xff08;头为1&#xff09;&#xff0c;再搞一个数组存放各元素之后所有数的乘积&#xff08;尾为1&#xff09;。 方法2&#xff1a;上面的方法是很好理解的&#xff0c;在此基础上应该如何优化…...

金仓数据库征文-金仓KES数据同步优化实践:逻辑解码与增量同步

目录 一.同步场景与方案选型 二.同步环境配置 1.前置条件验证 2.逻辑解码配置 三.同步实施与问题排查 1.结构映射规则 2.增量数据捕获 3.数据一致性校验 四.性能调优实践 1.同步线程优化 2.批量提交优化 3.资源监控指标 五.典型场景解决方案 1.双向同步冲突处理 …...

【前端基础】9、CSS的动态伪类(hover、visited、hover、active、focus)【注:本文只有几个粗略说明】

一、什么是伪类 选择器的一种&#xff0c;用于选择处于特定状态的元素。 最常见的现象&#xff1a;鼠标放在某些文字上面&#xff0c;文字就会加上颜色。 鼠标没放上去之前&#xff1a; 鼠标放上去之后&#xff1a; 二、动态伪类 图片来源&#xff08;链接文章也有其他伪…...

企业开发平台大变革:AI 代理 + 平台工程重构数字化转型路径

在企业数字化转型的浪潮中&#xff0c;开发平台正经历着前所未有的技术革命。从 AST&#xff08;抽象语法树&#xff09;到 AI 驱动的智能开发&#xff0c;从微服务架构到信创适配&#xff0c;这场变革不仅重塑了软件开发的底层逻辑&#xff0c;更催生了全新的生产力范式。本文…...