01. HarmonyOS应用开发实践与技术解析
文章目录
- 前言
- 项目概述
- HarmonyOS应用架构
- 项目结构
- Ability生命周期
- ArkTS语言特性
- 装饰器
- 状态管理
- UI组件与布局
- 基础组件
- 响应式布局
- 样式与主题
- 页面路由与参数传递
- 页面跳转
- 参数接收
- 数据绑定与循环渲染
- 数据接口定义
- 循环渲染
- 条件渲染
- 组件生命周期
- 最佳实践与性能优化
- 组件复用
- 响应式设计
- 性能优化
前言
随着华为HarmonyOS生态的不断发展,越来越多的开发者开始关注并投入到HarmonyOS应用开发中。本文将通过一个实际的项目案例,详细讲解HarmonyOS应用开发的核心技术和最佳实践,帮助开发者快速掌握HarmonyOS应用开发的要点。
项目概述
本项目是一个基于HarmonyOS的学习应用,主要包含了一个仪表盘示例页面,用于展示业务数据概览。项目采用了ArkTS语言开发,使用了HarmonyOS提供的UI框架和组件,实现了响应式布局和页面路由等功能。
HarmonyOS应用架构
项目结构
HarmonyOS应用的项目结构遵循一定的规范,主要包括以下几个部分:
- entry:应用的入口模块,包含了应用的主要代码和资源
- src/main/ets:ArkTS代码目录
- entryability:应用的Ability实现,是应用的入口点
- pages:应用的页面组件
- components:可复用的UI组件
- common:公共工具和常量
- src/main/resources:应用的资源文件,如图片、字符串等
- src/main/module.json5:模块配置文件
- src/main/ets:ArkTS代码目录
Ability生命周期
Ability是HarmonyOS应用的基本组成单元,类似于Android的Activity。在本项目中,EntryAbility是应用的主入口,它的生命周期包括:
export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {// Ability创建时调用}onDestroy(): void {// Ability销毁时调用}onWindowStageCreate(windowStage: window.WindowStage): void {// 窗口创建时调用,在这里加载主页面windowStage.loadContent('pages/Index', (err) => {// 页面加载回调});}onWindowStageDestroy(): void {// 窗口销毁时调用}onForeground(): void {// Ability进入前台时调用}onBackground(): void {// Ability进入后台时调用}
}
ArkTS语言特性
ArkTS是HarmonyOS应用开发的首选语言,它基于TypeScript,增加了声明式UI和状态管理等特性。
装饰器
ArkTS中的装饰器是一种特殊的声明,可以附加在类、方法、访问器、属性或参数上。本项目中使用了多种装饰器:
- @Entry:标记一个组件为页面入口
- @Component:定义一个自定义组件
- @State:定义组件内部的状态变量,当状态变化时会触发UI刷新
- @Prop:用于父组件向子组件传递数据
例如,在NavBar组件中:
@Component
export struct Navbar {@Prop title: string = ''build() {// 组件UI构建}
}
状态管理
ArkTS提供了多种状态管理机制,用于处理组件内部状态和组件间通信:
- @State:组件内部状态,变化时会触发组件重新渲染
- @Prop:父组件向子组件传递的属性,子组件不能修改
- @Link:双向绑定,父子组件可以共同修改
- AppStorage:应用级的状态存储
在DashboardExample组件中,使用@State管理数据:
@State screenWidth: number = 0
@State dataCards: DashboardCardItem[] = [{title: '今日销售额', value: '8,846', unit: '元', trend: '+12.5%', color: '#2A9D8F'},// 其他数据...
]
UI组件与布局
基础组件
HarmonyOS提供了丰富的基础UI组件,本项目中使用了:
- Text:文本显示组件
- Image:图片显示组件
- Column:垂直布局容器
- Row:水平布局容器
- Flex:弹性布局容器
- List:列表容器
响应式布局
HarmonyOS支持响应式布局,可以根据屏幕尺寸自适应调整UI。在DashboardExample中,通过检测屏幕宽度实现响应式布局:
aboutToAppear() {// 获取屏幕宽度,用于响应式布局this.screenWidth = px2vp(AppStorage.Get<number>('windowWidth') || 720)
}// 根据屏幕宽度决定每行显示的卡片数量
Flex({ wrap: FlexWrap.Wrap, justifyContent: this.screenWidth > 600 ? FlexAlign.Start : FlexAlign.SpaceAround }) {// 卡片布局
}
样式与主题
ArkTS支持链式调用设置组件样式,使UI代码更加简洁:
Text(card.value).fontSize(28).fontWeight(FontWeight.Bold).fontColor(card.color)
还可以通过设置backgroundColor、borderRadius、shadow等属性实现丰富的视觉效果:
.width(this.screenWidth > 600 ? '22%' : '45%')
.height(120)
.padding(16)
.margin(8)
.borderRadius(12)
.backgroundColor(Color.White)
// 添加卡片阴影效果
.shadow({radius: 4, color: '#1A000000', offsetY: 2})
页面路由与参数传递
HarmonyOS提供了router模块用于页面间导航和参数传递。
页面跳转
在Index页面中,通过router.pushUrl实现页面跳转:
router.pushUrl({url: item.path,params: {desc: item.desc,value: item.value}
})
参数接收
在目标页面中,通过router.getParams获取传递的参数:
onPageShow(): void {// 获取传递过来的参数对象const params = router.getParams() as Record<string, string>;// 获取传递的值if (params) {this.desc = params.desc as stringthis.title = params.value as string}
}
数据绑定与循环渲染
数据接口定义
使用TypeScript接口定义数据结构,提高代码的可读性和可维护性:
export interface DashboardCardItem {title: string; // 卡片标题value: string; // 数值内容unit: string; // 数值单位trend: string; // 趋势变化color: string; // 卡片主题颜色
}
循环渲染
使用ForEach语法实现列表循环渲染:
ForEach(this.dataCards, (card: DashboardCardItem) => {// 数据卡片UI构建
})
条件渲染
ArkTS支持在UI构建中使用条件表达式,实现动态UI:
// 根据趋势是否为正值显示不同颜色
Text(card.trend).fontSize(14).fontColor(card.trend.includes('+') ? '#2A9D8F' : '#E76F51')
组件生命周期
ArkTS组件有多个生命周期回调函数:
- aboutToAppear:组件即将出现时调用,用于初始化
- aboutToDisappear:组件即将消失时调用,用于清理资源
- onPageShow:页面显示时调用
- onPageHide:页面隐藏时调用
- onBackPress:处理返回按键事件
aboutToAppear() {// 初始化工作this.screenWidth = px2vp(AppStorage.Get<number>('windowWidth') || 720)
}onPageShow(): void {// 页面显示时的处理const params = router.getParams() as Record<string, string>;// ...
}
最佳实践与性能优化
组件复用
将通用UI封装为可复用组件,如本项目中的NavBar组件:
@Component
export struct Navbar {@Prop title: string = ''build() {Row(){Image($r('app.media.tornLeft')).width(30).onClick(()=>{router.back()})Text(this.title).fontSize(20).fontWeight(800)}.justifyContent(FlexAlign.SpaceBetween).width('100%').height('50')}
}
响应式设计
根据不同屏幕尺寸调整布局,提升用户体验:
.width(this.screenWidth > 600 ? '22%' : '45%')
性能优化
- 懒加载:只在需要时加载组件和资源
- 状态管理:合理使用状态管理机制,避免不必要的重渲染
- 资源复用:复用组件和资源,减少内存占用
相关文章:
01. HarmonyOS应用开发实践与技术解析
文章目录 前言项目概述HarmonyOS应用架构项目结构Ability生命周期 ArkTS语言特性装饰器状态管理 UI组件与布局基础组件响应式布局样式与主题 页面路由与参数传递页面跳转参数接收 数据绑定与循环渲染数据接口定义循环渲染 条件渲染组件生命周期最佳实践与性能优化组件复用响应式…...
001-码云操作
码云操作 一、配置公钥1.官网地址1.进入 git bash2.查看生成的公钥3.设置到 Gitee4.测试 二、初始化一个项目1.新建仓库 一、配置公钥 方便后续提交代码不用填写密码 1.官网地址 官网地址:https://gitee.com/Git码云教程:https://gitee.com/help/arti…...
10.LED点阵实验
LED点阵是一种由发光二极管排列而成的显示器件,在生活里的各种电器中很常见,像汽车报站器和广告屏等地方都会用到它。 平时用得比较多的是 88 点阵。多个 88 点阵能组合成不同大小的 LED 点阵显示屏,比如 4 个 88 点阵可以拼成一个 1616 点阵…...
cesium+vue3自定义HTML实体弹窗、加高德路网、防实体漂浮、让用户画圆、鹰眼
一、基础使用:Cesium.js基础使用(vue)-CSDN博客 1、基础路径 为 Cesium 库设置一个全局变量 CESIUM_BASE_URL,用于指定 Cesium 的资源文件(如 WebGL shaders、纹理、字体等)的 示例场景:假设你…...
Spring(二)容器-注册
目录 一 定义组件Bean (1)添加组件 (2)获取组件 二 配置类Configuration (1)配置类的作用 三 MVC分层注解 - Controller: - Service: - Repository: 四 批量扫描ComponentScan (1) 默认扫描当前包及其子包 (2) 指定扫描包路径 …...
Java-实现PDF合同模板填写内容并导出PDF文件
可用于公司用户合同导出pdf文件 效果图 一、导入所需要jar包 <!--生成PDF--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version></dependency><dependency&…...
C# 数据转换
1. 文本框读取byte,ushort格式数据 byte addr; if (byte.TryParse(textBoxAddr.Text, out addr) true) {}2. 字节数组 (byte[]) 转换为 ASCII 字符串 byte[] bytes { 72, 101, 108, 108, 111 }; // "Hello" 的 ASCII 码 string s0 Encoding.ASCII.Ge…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_list_init
ngx_list_init 定义在 src\core\ngx_list.h static ngx_inline ngx_int_t ngx_list_init(ngx_list_t *list, ngx_pool_t *pool, ngx_uint_t n, size_t size) {list->part.elts ngx_palloc(pool, n * size);if (list->part.elts NULL) {return NGX_ERROR;}list->par…...
鸿蒙NEXT开发-元服务和服务卡片的开发
注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 目录 1. 元服务基本概念 1.1 基本介绍 1.2 元…...
Docker安装Redpandata-console控制台
介绍 Redpanda控制台,这是一个功能强大的Web UI,用于管理和监控您的Redpanda 集群。探索实际示例和场景,以帮助您了解如何利用 Redpanda 控制台实现不同的用例,包括数据可观察性、Redpanda 管理、访问控制和连接。 可对Redpanda…...
DeepSeek Agent 企业应用
DeepSeek Agent 技术是基于深度求索(DeepSeek)大模型构建的智能代理系统,其核心技术架构与应用优势可从以下几个方面进行深度解析: 一、核心技术架构 混合专家模型(MoE)与架构优化 DeepSeek 的模型家族(如DeepSeekMoE、DeepSeek-V3)采用 混合专家系统(MoE) ,通过动…...
vcredist_x64 资源文件分享
vcredist_x64 是 Microsoft Visual C Redistributable 的 64 位版本,用于在 64 位 Windows 系统上运行使用 Visual C 开发的应用程序。它包含了运行这些应用程序所需的运行时组件。 vcredist_x64 资源工具网盘下载链接:https://pan.quark.cn/s/ef56f838f…...
解决redis lettuce连接池经常出现连接拒绝(Connection refused)问题
一.软件环境 windows10、11系统、springboot2.x、redis 6 7 linux(centos)系统没有出现这问题,如果你是linux系统碰到的,本文也有一定大参考价值。 根本思路就是:tcp/ip连接的保活(keepalive)。 二.问题描述 在spr…...
Mac远程桌面软件哪个好用?
远程桌面软件能帮助我们快速的远程控制另一台电脑,从而提供远程帮助,或者进行远程办公。那么,对macOS系统有什么好用的Mac远程桌面软件呢? 远程看看是一款操作简单、界面简洁的远程桌面软件,支持跨平台操作࿰…...
一篇吃透模型:all-MiniLM-L6-v2
MiniLM 是什么? MiniLM 是微软研究院开发的一种轻量级的语言模型,旨在以较小的参数量和计算成本实现与大型语言模型(如 BERT)相当的性能。它是基于 Transformer 架构的预训练模型,通过深度自注意力蒸馏(De…...
深入学习Linux内存管理-缺页异常
1.什么是缺页异常 在Linux虚拟内存管理中,缺页异常(Page Fault) 是CPU在访问虚拟地址时发现对应物理页未就绪时触发的中断。根据触发原因,缺页异常分为两类: 次要缺页(Minor Fault):物理页已存在(如缓存或共享内存),只需建立映射。 主要缺页(Major Fault):需要…...
互推机制在开源AI智能名片2+1链动模式S2B2C商城小程序源码推广中的应用探索
摘要: 在数字化营销时代,开源AI智能名片21链动模式S2B2C商城小程序源码作为一种创新的技术解决方案,正逐步成为企业数字化转型的重要工具。然而,面对激烈的市场竞争,如何高效推广这一前沿技术产品,成为开发…...
SparkSQL全之RDD、DF、DS ,UDF、架构、资源划分、sql执行计划、调优......
1 SparkSQL概述 1.1 sparksql简介 Shark是专门针对于spark的构建大规模数据仓库系统的一个框架Shark与Hive兼容、同时也依赖于Spark版本Hivesql底层把sql解析成了mapreduce程序,Shark是把sql语句解析成了Spark任务随着性能优化的上限,以及集成SQL的一些…...
神经网络 - 激活函数(Maxout 单元)
一、Maxout 单元 Maxout 单元是一种特殊的激活函数,用于神经网络中,其主要思想是通过多个线性变换的最大值来作为神经元的输出,从而提高模型的表达能力和鲁棒性。 1. 数学定义 假设输入为 x,Maxout 单元会计算 k 个线性变换&am…...
【软考-架构】1.3、磁盘-输入输出技术-总线
GitHub地址:https://github.com/tyronczt/system_architect ✨资料&文章更新✨ 文章目录 存储系统💯考试真题输入输出技术💯考试真题第一题第二题 存储系统 寻道时间是指磁头移动到磁道所需的时间; 等待时间为等待读写的扇区…...
专业便捷PDF软件,即开即用
PDF文件因其小巧的体积、便捷的分享与存储方式,以及卓越的安全性,已成为学习、企业及各类机构中不可或缺的文件格式。无论是在学术研究、课程资料、商业报告还是合同文件中,PDF都能有效保持原有的格式和布局,确保内容在不同设备和…...
TEE可信执行环境的安全业务保护方案
基于硬件隔离技术,安全业务可在**TEE(可信执行环境)**中运行,以保障安全资产的完整性。TEE具备以下核心特点: 跨平台兼容:已集成于多款芯片平台(MTK、NXP、RK、Samsung、TI、JLQ、Spreadtrum等…...
smolagents学习笔记系列(番外二)Agent+Ollama分析本地图像与文件
这篇文章是在 smolagents 官方教程结束后的番外篇二,实现了如何使用 smolagents 库 Ollama 调用本地模型对图像与文件进行分析。 【注意】:这篇文章需要你在本地部署Ollama的视觉语言模型,如果你的架构方案是纯线上模式,则可以跳…...
Unity TMP_InputField 多行输入时的高度适应
实现 设定输入框的行类型为多行新建行。 inputField.lineType TMP_InputField.LineType.MultiLineNewline; 进行输入时调整输入框高度。 height inputField.textComponent.preferredHeight offset; if (height < minHeight) {rect.SetSizeWithCurrentAnchors(RectTran…...
学习第九天-栈
栈的定义:栈是一种线性表数据结构,仅允许在表的一端(栈顶)进行插入(入栈)和删除(出栈)操作。没有数据元素时为「空栈」,遵循「后进先出(LIFO)」原…...
ArcGIS Pro应用指南:如何为栅格图精确添加坐标信息
一、引言 在地理信息系统中,栅格图是一种重要的数据类型。 然而,有时我们从网络上获取的栅格图并不包含坐标信息,这使得它们难以与其他带有坐标信息的数据进行集成和分析。 为了解决这一问题,我们需要对栅格图进行地理配准&…...
[前端] redux-thunk
Ps:这里是react18之后的使用方法 一、场景描述 为什么要使用redux-thunk? Thunk-“a piece of code that does some delayed word”。 官方给的解释是redux reducer必须是不包含副作用,但是真正的应用需要有副作用的逻辑。这个副作用包括异步逻辑、产生…...
委托者模式(掌握设计模式的核心之一)
目录 问题: 举例: 总结:核心就是利用Java中的多态来完成注入。 问题: 今天刷面经,刷到装饰者模式,又进阶的发现委托者模式,发现还是不理解,特此记录。 举例: 老板…...
爱吃蟠桃的孙悟空
爱吃蟠桃的孙悟空 真题目录: 点击去查看 E 卷 100分题型 题目描述 孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵桃树,每颗树上都有桃子,守卫将在 H 小时后回来。 孙悟空可以决定他吃蟠桃的速度K(个/小时),每个小时选一颗桃树,并从树上吃掉 K 个…...
低功耗抄表方案-支持Modbus、DL/T645 及 DL/T698 协议电表
这是我测试的一款无线红外抄表器,该无线红外抄表器的功能特点及应用场景可归纳如下: 一、核心功能特性 1.多协议兼容与数据采集 可以采集Modbus、DL/T645 及 DL/T698 协议电表的各项数据,兼容国网电表、光伏逆变器等设备,包括…...
【含文档+PPT+源码】基于SpringBoot电脑DIY装机教程网站的设计与实现
项目介绍 本课程演示的是一款 基于SpringBoot电脑DIY装机教程网站的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…...
Android内存优化指南:从数据结构到5R法则的全面策略
目录 一、APP 内存限制 二、内存的三大问题 2.1、内存抖动(Memory Churn) 2.1.1 频繁创建短生命周期对象 2.1.2 系统API或第三方库的不合理使用 2.1.3 Handler使用不当 2.2、内存泄漏(Memory Leak) 2.2.1 静态变量持有Activity或Context引用 2.2.2 未取消的回调或…...
关于服务器cpu过高的问题排查
1.定位是哪个程序造成的cpu过高 如果有云服务器,就用云服务器自带的监控功能,查时间段 如果没有,则使用: ps -eo pid,comm,pcpu,pmem,cputime --sort-cputime | head -n 100 2.定位到问题 发现是uwsgi的cpu消耗过高࿰…...
2024华为OD机试真题-热点网站统计(C++)-E卷-100分
2024华为OD机试最新E卷题库-(C卷+D卷+E卷)-(JAVA、Python、C++) 目录 题目描述 输入描述 输出描述 用例1 用例2 考点 题目解析 代码 c++ 题目描述 企业路由器的统计页面,有一个功能需要动态统计公司访问最多的网页 URL top N。 请设计一个算法,可以高效动态统计 …...
【UCB CS 61B SP24】Lecture 19 20: Hashing Hashing II 学习笔记
本文首先介绍了哈希表中的两大关键概念:哈希函数与哈希码,并使用 Java 实现了一个通过链地址法解决哈希冲突的哈希表。 1. 哈希函数与哈希码 1.1 动态多列表实现整数集合 我们在 Lecture 11 中第一次介绍了集合(Set)࿰…...
一、图形图像的基本概念
文章目录 一、分辨率概念二、图形图像的区别三、位图和矢量图的区别 一、分辨率概念 图形显示计数中的分辨率概念有三种,即屏幕分辨率、显示分辨率和显卡分辨率。它们既有区别又有着密切的联系,对图形显示的处理有极大的影响。 1.屏幕分辨率 显示器分辨…...
【二.提示词工程与实战应用篇】【1.提示词工程入门:AI对话的艺术】
大家好,今天咱们来聊聊一个特别有意思的话题——提示词工程。你可能已经听说过这个词,或者在使用AI工具时不经意间接触过它。但提示词工程到底是什么?它为什么这么重要?咱们今天就来深入探讨一下,看看它是如何影响我们与AI的对话,以及如何在实际应用中发挥作用的。 什么…...
C# IComparer<T> 使用详解
总目录 前言 在 C# 编程中,排序操作是日常开发中不可或缺的一部分。当默认的排序逻辑无法满足需求时,IComparer<T> 提供了一种强大且灵活的解决方案。它允许我们为自定义类型提供特定的比较逻辑。这对于实现排序、搜索和其他需要基于特定规则进行…...
(十 三)趣学设计模式 之 模版方法模式!
目录 一、 啥是模板方法模式?二、 为什么要用模板方法模式?三、 模板方法模式的实现方式四、 模板方法模式的优缺点五、 模板方法模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式&a…...
KVM虚拟机磁盘创建探究-2
使用 virt-install 命令自动创建磁盘镜像和使用 qemu-img 手动创建磁盘镜像,在磁盘镜像本身格式和基本功能上是一致的,但在一些特性如初始占用磁盘空间、创建时的可配置性等方面存在区别,下面以 QCOW2 格式磁盘镜像为例进行详细说明。 初始占…...
vite创建vue项目
这里默认node已经安装好能使用npm 检查node版本node -v 执行npm create vitelatest 项目名,按提示选择Vue和语言 cd到项目名文件夹,或者直接用vscode等编辑器打开,执行npm install 启动项目npm run dev 成功界面...
js的简单介绍
一.javascript(是什么) 是一种运行在客户端(浏览器)的编程语言,实现人机交互效果 作用 网页特效(监听客户的一些行为让网页做出对应的反馈)表单验证(针对表格数据的合法性进行判断)数据交互(获取后台的数据…...
GitHub 语析 - 基于大模型的知识库与知识图谱问答平台
语析 - 基于大模型的知识库与知识图谱问答平台 GitHub 地址:https://github.com/xerrors/Yuxi-Know 📝 项目概述 语析是一个强大的问答平台,结合了大模型 RAG 知识库与知识图谱技术,基于 Llamaindex VueJS FastAPI Neo4j 构…...
Spark核心之02:RDD、算子分类、常用算子
spark内存计算框架 一、目标 深入理解RDD弹性分布式数据集底层原理掌握RDD弹性分布式数据集的常用算子操作 二、要点 ⭐️1. RDD是什么 RDD(Resilient Distributed Dataset)叫做**弹性分布式数据集,是Spark中最基本的数据抽象,…...
docker关闭mysql端口映射的使用
需求 项目中的数据库为mysql,如果将端口映射到宿主机上,容易被工具扫描出,且随着国产化的进程推进,mysql将不被允许。为了提高安全性与满足项目需求,这里采用隐藏mysql端口方式,不映射宿主机端口ÿ…...
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(十八)-农夫约翰的奶酪块、蛋糕游戏、奶牛体检
前言 在算法竞赛和编程挑战中,博弈类问题往往要求我们充分理解参与者的行为模式和最优策略,从而提出合理的解法。在这篇博客中,我们将探讨三个有趣且富有挑战性的算法题:农夫约翰的奶酪块、蛋糕游戏和奶牛体检。这些问题涉及不同…...
蓝桥杯 之 图形规律
文章目录 分析组成,找到规律数正方形 在蓝桥杯中,常常会有一些图形的规律的题目需要我们去解决,所以我们需要学会其中的一些方法,我们这样才能解决对应的问题 方法1:直接对n进行拆分方法2:使用递归的思路&a…...
Django 项目模块化开发指南:实现 Vue 风格的组件化
在 Django 项目中,我们经常需要 复用 HTML 代码,避免重复编写相同的模板。例如,博客系统中,博客列表页 和 文章详情页 可能都有相同的 导航栏、模态框、页脚 等。如何像 Vue 一样进行 模块化开发,让代码更加清晰、可维护呢? 本文将详细介绍 Django 的模板继承 和 {% incl…...
在kali linux中kafka的配置和使用
官方文档 一、安装依赖 删除原有的jdk sudo apt remove --purge openjdk-\* sudo apt clean安装 Java (JDK 11) sudo apt install openjdk-11-jdk -y # 验证安装 java -version二、下载并解压 Kafka 下载 Kafka wget https://dlcdn.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.t…...
Spring Bean 作用域设置为prototype在并发场景下是否是线程安全的
在并发场景下,将 Spring Bean 作用域设置为 prototype 通常能在一定程度上保证线程安全,但这并不意味着绝对的线程安全 1. prototype 作用域的特点 在 Spring 中,Bean 的作用域定义了 Bean 的生命周期和可见性。prototype 作用域表示每次从…...