鸿蒙系统(HarmonyOS)移动开发实战

鸿蒙系统(HarmonyOS) 移动开发实战
分享 推荐 0 收藏 6 阅读 505
柳伟卫 (作者) 978-7-115-64569-2

关于本书的内容有任何问题,请联系 李召

(1) 新技术、新理念: 依据华为官方开发文档,基于ArkUI JS开发框架和HarmonyOS 3.0应用程序开发技术,采用“案例诠释理论内涵、项目推动实践创新”的编写理念组织内容,内容编排上以案例为载体,全面系统地阐述HarmonyOS应用程序开发从入门到精通的理论知识和技术要点。

(2) 重理论、强实践: 根据作者近年来参与的实际工程项目和教学实践安排各章节的内容,以“易学、易用、易扩展”的技术范例和“有趣、经典、综合性”的项目案例为主线,一步一步地向读者展现技术范例和项目案例设计与实现时所涉及的HarmonyOS应用程序开发技术,既能巩固理论知识,又能强化实践能力。
(3) 多资料、易入门: 随书既提供了教学课件、教学大纲及程序源代码等传统的教学资源,还配套了全书微课视频,手把手地向读者传授HarmonyOS应用程序开发从入门到精通的技术和技巧,方便读者更好地掌握HarmonyOS应用程序开发技术,提高实际开发水平。
¥79.80 ¥67.83 (8.5 折)

内容摘要

本书围绕如何从0开始构建一个完整的短视频App来介绍HarmonyOS的各项功能。短视频App拥有非常丰富的功能,比如视频上传、视频发布、视频播放、视频暂停、视频进度条拖动、点赞、收藏、关注、评论等众多功能。这些功能需要用到非常多的HarmonyOS组件和API,涉及HarmonyOS的Ability、UI开发、自定义布局、数据管理、视频、相机、图像、安全管理、媒体数据管理等诸多主题。通过学习并实现一个类似抖音的短视频App,读者能够熟悉并掌握HarmonyOS应用开发所涉及的知识点和流程,产生浓厚的学习兴趣,提升编程能力水平。完整实现案例,理论结合实战,有利于读者学习。读者学习完本书之后,能够独立承担HarmonyOS App的设计与实现,增加就业机会。
本书适合作为高等学校移动开发相关课程的教材,也适合作为移动开发工程师的学习参考书。

目录

第1章 HarmonyOS概述
1.1 为什么要学习HarmonyOS 1
1.1.1 国货精品 1
1.1.2 “大厂”制造 2
1.1.3 风口红利 2
1.2 HarmonyOS应用初体验 2
1.3 本章小结 4
第2章 初探HarmonyOS
2.1 学习HarmonyOS之前需要哪些知识储备 5
2.1.1 HarmonyOS开发的两大方向 5
2.1.2 HarmonyOS应用开发的两种技术栈 6
2.2 HarmonyOS是如何诞生的 7
2.3 HarmonyOS有哪些特性 9
2.3.1 硬件互助,资源共享 9
2.3.2 一次开发,多端部署 12
2.3.3 统一操作系统,弹性部署 12
2.4 全视角了解HarmonyOS架构 13
2.4.1 内核层 13
2.4.2 系统服务层 14
2.4.3 框架层 14
2.4.4 应用层 15
2.5 本章小结 16
第3章 开发环境搭建
3.1 开发第一步——从注册华为账号开始 17
3.1.1 开发者享有的服务/权益 17
3.1.2 注册、认证需要准备的资料 17
3.1.3 注册账号 17
3.1.4 登录账号 18
3.1.5 实名认证 18
3.2 如何下载和安装开发工具HUAWEI DevEco Studio 21
3.2.1 运行环境要求 21
3.2.2 下载和安装Node.js 21
3.2.3 下载和安装DevEco Studio 21
3.3 如何设置DevEco Studio 22
3.4 熟悉DevEco Studio的常用功能及使用技巧 24
3.4.1 创建新工程 24
3.4.2 打开现有工程 25
3.5 本章小结 25
第4章 HarmonyOS应用之“HelloWorld”
4.1 如何创建一个HarmonyOS应用之“HelloWorld” 26
4.1.1 创建新工程 26
4.1.2 选择支持不同设备类型的模板 26
4.1.3 配置项目信息 27
4.1.4 自动生成工程代码 27
4.2 怎样使用模拟器运行HarmonyOS应用 27
4.2.1 运行工程 28
4.2.2 启动模拟器 28
4.2.3 再次运行工程 29
4.2.4 使用本地模拟器运行应用 29
4.3 怎样使用远程真机运行HarmonyOS应用 31
4.3.1 启动远程真机设备 31
4.3.2 运行应用 31
4.3.3 对应用进行签名 32
4.3.4 再次运行应用 33
4.4 怎样使用本地真机运行HarmonyOS应用 33
4.4.1 连接真实的设备 33
4.4.2 运行应用 34
4.5 怎样使用预览器预览HarmonyOS应用 34
4.5.1 如何安装预览器 35
4.5.2 如何使用预览器 35
4.6 本章小结 35
第5章 再探HarmonyOS应用结构
5.1 鸿蒙系统真的是“安卓换壳”吗 36
5.1.1 鸿蒙系统不是“安卓换壳” 36
5.1.2 鸿蒙系统术语解读 37
5.2 HarmonyOS应用结构之App结构详解 38
5.2.1 用户应用程序 38
5.2.2 用户应用程序包结构 38
5.2.3 代码层次的应用 39
5.3 HarmonyOS应用结构之Ability 39
5.3.1 Ability类 39
5.3.2 AbilitySlice类 40
5.3.3 UI 40
5.4 HarmonyOS应用结构之文件详解 41
5.4.1 库文件 41
5.4.2 资源文件 41
5.4.3 配置文件 43
5.5 HarmonyOS应用结构之pack.info 49
5.6 本章小结 50
第6章 HarmonyOS的核心概念及常用UI组件
6.1 如何理解HarmonyOS独有的Ability框架 51
6.1.1 FA 51
6.1.2 PA 52
6.1.3 Ability的配置 52
6.1.4 Ability的三层架构 52
6.2 初识Ability之Page Ability 53
6.2.1 Page Ability基本概念 53
6.2.2 多个AbilitySlice构成一个Page 54
6.2.3 AbilitySlice路由配置 54
6.3 深入理解Page与AbilitySlice的生命周期 55
6.3.1 Page生命周期 55
6.3.2 AbilitySlice生命周期 57
6.3.3 Page与AbilitySlice生命周期关联 57
6.4 如何实现Page中AbilitySlice之间的路由和导航 58
6.4.1 创建应用 58
6.4.2 创建多个AbilitySlice 58
6.4.3 新增PayAbilitySlice样式布局 59
6.4.4 设置PayAbilitySlice样式布局 60
6.4.5 如何实现AbilitySlice之间的路由和导航 61
6.4.6 运行应用 63
6.5 再识Ability之Service Ability 63
6.5.1 创建Service 64
6.5.2 启动与停止Service 65
6.5.3 连接Service 66
6.6 深入理解Service Ability的生命周期 67
6.7 如何实现Service的创建、启动和连接 67
6.7.1 创建Service 67
6.7.2 创建远程对象 70
6.7.3 修改MainAbilitySlice 70
6.7.4 修改ability_main.xml 73
6.7.5 运行应用 74
6.8 终识Ability之Data Ability 75
6.8.1 URI 75
6.8.2 访问Data 75
6.9 如何实现Data的创建和访问 76
6.9.1 创建Data 76
6.9.2 初始化数据库 79
6.9.3 重写query( )方法 80
6.9.4 重写insert( )方法 80
6.9.5 重写update( )方法 81
6.9.6 重写delete( )方法 81
6.9.7 修改MainAbilitySlice 81
6.9.8 运行应用 85
6.10 深入理解Ability框架必用信息载体——lntent 86
6.10.1 Operation与Parameters 86
6.10.2 根据Ability的全称启动应用 86
6.10.3 根据Operation的其他属性启动应用 87
6.10.4 启动系统应用 92
6.11 HarmonyOS常用UI组件 96
6.12 常用UI组件——Text 96
6.12.1 设置背景 96
6.12.2 设置字号和颜色 97
6.12.3 设置字体风格和字重 99
6.12.4 设置文本对齐方式 100
6.12.5 设置文本换行和最大显示行数 101
6.12.6 设置自动调节字号 101
6.12.7 实现跑马灯效果 103
6.12.8 场景示例 105
6.13 常用UI组件——Image 107
6.13.1 创建Image 107
6.13.2 设置透明度 108
6.13.3 设置缩放系数 109
6.14 常用UI组件——Slider 109
6.14.1 创建Slider 109
6.14.2 设置Slider的展示方向 110
6.15 常用UI组件——Button 111
6.15.1 创建Button 111
6.15.2 设置点击事件 113
6.15.3 设置椭圆按钮 115
6.15.4 设置圆形按钮 116
6.15.5 场景示例 117
6.16 常用UI组件——PageSlider 121
6.16.1 创建PageSlider 122
6.16.2 创建PageSliderProvider的子类TextPageSliderProvider 122
6.16.3 使用PageSliderProvider 123
6.16.4 运行应用 124
6.16.5 设置布局方向 124
6.17 常用UI组件——ScrollView 125
6.17.1 创建ScrollView 125
6.17.2 配置Text显示的内容 125
6.18 常用UI组件——ListContainer 126
6.18.1 创建ListContainer 126
6.18.2 创建ListContainer子布局文件 127
6.18.3 创建ListContainer数据包装类 127
6.18.4 创建ListContainer数据提供者 128
6.18.5 修改MainAbilitySlice 129
6.19 常用UI组件——TabList 130
6.19.1 创建TabList 130
6.19.2 响应焦点变化 132
6.20 常用UI组件——ToastDialog 134
6.20.1 创建Button 134
6.20.2 生成ToastDialog 135
6.20.3 自定义ToastDialog的样式 135
6.21 常用UI组件——CommonDialog 136
6.21.1 创建Button 137
6.21.2 生成CommonDialog 137
6.21.3 自定义CommonDialog的样式 138
6.22 本章小结 138
第7章 HarmonyOS常用布局及技巧
7.1 HarmonyOS应用开发常用的6种布局方式 139
7.1.1 组件和布局 139
7.1.2 Component和ComponentContainer 139
7.1.3 LayoutConfig 140
7.1.4 组件树 140
7.1.5 编写布局的方式 141
7.1.6 布局方式 141
7.2 使用DirectionalLayout实现水平或者垂直方向排列 141
7.2.1 DirectionalLayout的自有XML属性 142
7.2.2 DirectionalLayout所包含组件可支持的XML属性 142
7.2.3 DirectionalLayout演示示例 142
7.3 使用DependentLayout实现相对位置排列 145
7.3.1 DependentLayout的自有XML属性 146
7.3.2 DependentLayout所包含组件可支持的XML属性 146
7.3.3 DependentLayout演示示例 148
7.4 使用StackLayout实现以层叠的方式显示视图 151
7.4.1 StackLayout所包含组件可支持的XML属性 152
7.4.2 StackLayout演示示例 152
7.5 使用TableLayout以表格的方式划分子组件 153
7.5.1 TableLayout的自有XML属性 153
7.5.2 TableLayout演示示例 154
7.6 使用PositionLayout通过指定准确的坐标值显示组件 155
7.7 使用AdaptiveBoxLayout实现自适应布局能力 157
7.7.1 AdaptiveBoxLayout实现原理 157
7.7.2 AdaptiveBoxLayout常用方法 157
7.7.3 AdaptiveBoxLayout演示示例 158
7.8 本章小结 161
第8章 短视频App需求分析及设计
8.1 短视频平台概况 162
8.1.1 短视频平台百花齐放 162
8.1.2 短视频平台功能 163
8.2 我们要实现的功能 163
8.3 HarmonyOS短视频App架构 165
8.4 HarmonyOS短视频App之前台设计 166
8.5 HarmonyOS短视频App之后台设计 167
8.6 HarmonyOS短视频App之存储设计 167
8.6.1 关系数据库运作机制 167
8.6.2 ORM数据库运作机制 168
8.6.3 HarmonyOS短视频App的存储设计主要内容 168
8.7 本章小结 168
第9章 短视频App原型设计与实现
9.1 应用初始化 169
9.1.1 为什么需要原型设计 169
9.1.2 如何实现原型设计 169
9.1.3 创建短视频App 170
9.2 欢迎界面 170
9.2.1 创建WelcomePageAbility 170
9.2.2 修改ability_welcome.xml 170
9.2.3 主入口显示WelcomePageAbility 171
9.3 注册界面 172
9.3.1 创建RegisterAbilitySlice 172
9.3.2 修改ability_register.xml 172
9.3.3 导航到RegisterAbilitySlice 172
9.4 首页 173
9.4.1 注册界面添加Button 173
9.4.2 从注册界面导航到MainAbilitySlice 174
9.5 导航栏 175
9.5.1 用DirectionalLayout实现导航栏 175
9.5.2 用Button实现导航栏中的按钮 175
9.6 视频发布界面 177
9.6.1 新建VideoPublishPageAbility 177
9.6.2 修改ability_video_publish_layout.xml 177
9.6.3 从首页导航到VideoPublishPageAbility 177
9.7 “我的”界面 179
9.7.1 创建MePageAbility 179
9.7.2 从首页导航到MePageAbility 180
9.7.3 从视频发布界面导航到MePageAbility 181
9.7.4 从MePageAbility导航到视频发布界面 182
9.7.5 从MePageAbility导航到首页 183
9.8 本章小结 184
第10章 短视频App个人管理模块设计与实现
10.1 美化欢迎界面 185
10.1.1 更换Logo 185
10.1.2 修改背景色 186
10.1.3 修改字体颜色 186
10.2 基于TextField搭建注册界面 187
10.2.1 使用TextField实现账号和密码输入框 187
10.2.2 使用Image设置头像 188
10.2.3 修改Button样式 188
10.3 基于ScrollView、TableLayout实现相册界面 189
10.3.1 创建ImageSelectionAbilitySlice 189
10.3.2 TableLayout和ScrollView 189
10.3.3 动态添加图片到TableLayout 190
10.3.4 动态计算图片的宽度 191
10.4 将JSON文件内容解析为图片资源 193
10.4.1 准备本地图片资源及JSON文件 193
10.4.2 读取JSON文件内容 193
10.4.3 JSON字符串转换为Java对象列表 194
10.5 实现本地图片资源获取的工具类CommonUtil 195
10.5.1 创建实现本地图片资源获取的方法getImageSource( ) 195
10.5.2 将JSON数据转换为PortraitInfo列表数据 195
10.5.3 使用CommonUtil在相册中显示图片 196
10.6 选取本地图片资源作为用户头像 197
10.6.1 跳转到相册界面 197
10.6.2 选择相册图片 198
10.7 通过onResult( )获取头像选择的结果 199
10.7.1 使用presentForResult( )跳转界面 200
10.7.2 使用setResult( )回写结果 200
10.7.3 重写onResult( )来获取结果 201
10.8 对用户注册/登录时账号、密码进行校验 201
10.8.1 获取用户的账号和密码 201
10.8.2 校验账号和密码 202
10.9 对用户注册/登录时头像进行校验 202
10.9.1 将头像路径作为类成员变量 202
10.9.2 完善校验方法 203
10.10 初始化ORM数据库 204
10.10.1 添加与compileOptions相关的配置 204
10.10.2 继承OrmDatabase 205
10.10.3 创建DatabaseUitl 205
10.10.4 执行DatabaseUtil.initStore( )初始化数据存储 206
10.11 基于ORM实现用户信息存储 207
10.11.1 定义用户实体UserInfo 207
10.11.2 创建用户数据仓库UserInfoRepository 209
10.11.3 使用UserInfoRepository存储和查询用户信息 210
10.12 本章小结 211
第11章 短视频App核心功能——视频管理模块
 11.1 定义视频播放器的生命周期接口IVideoPlayerLifecycle 212
11.2 定义视频播放器的状态枚举类PlayerStatusEnum和视频播放器的状态变化监听器StatusChangeListener 212
11.2.1 PlayerStatusEnum 213
11.2.2 StatusChangeListener 214
11.3 定义视频播放器的接口IVideoPlayer 214
11.4 实现视频播放器的生命周期接口实现类VideoPlayerLifecycle 216
11.5 基于Player、Surface实现视频播放器 218
11.5.1 创建VideoPlayer 218
11.5.2 创建Builder 218
11.5.3 实现addSurface( )方法 219
11.5.4 实现addPlayerStatusCallback( )方法 219
11.5.5 实现play( )方法 219
11.5.6 实现构造函数 220
11.5.7 实现initBasePlayer( )方法 220
11.5.8 实现start( )方法 224
11.5.9 实现replay( )方法 225
11.5.10 实现reload( )方法 225
11.5.11 实现resume( )方法 225
11.5.12 实现pause( )方法 226
11.5.13 实现getCurrentPosition( )方法 226
11.5.14 实现getDuration( )方法 226
11.5.15 实现getVideoScale( )方法 226
11.5.16 实现rewindTo( )方法 227
11.5.17 实现isPlaying( )方法 227
11.5.18 实现stop( )方法 227
11.5.19 实现release( )方法 227
11.5.20 实现getLifecycle( )方法 228
11.5.21 实现getPlayerStatus( )方法 228
11.5.22 实现getBuilder( )方法 228
11.6 定义绑定视频播放器相关信息的接口IVideoPlayerInfoBinding 228
11.6.1 新建VideoInfo 229
11.6.2 定义VideoPlayerInfo 232
11.6.3 定义IVideoPlayerInfoBinding接口 233
11.7 基于自定义布局实现播放器界面PlayerView 233
11.7.1 定义PlayerView 233
11.7.2 成员变量及构造函数的实现 234
11.7.3 绑定、解绑视频播放器相关信息 236
11.7.4 自适应屏幕大小 237
11.7.5 启动播放 237
11.8 基于自定义布局、AnimatorProperty实现加载动画界面PlayerLoading 238
11.8.1 创建PlayerLoading类 238
11.8.2 创建布局文件video_player_loading_layout.xml 239
11.8.3 成员变量及构造函数的实现 239
11.8.4 绑定、解绑视频播放器相关信息 241
11.8.5 实现onTouchEvent( )方法 242
11.9 基于自定义布局、Slider实现视频控制器界面PlayerController 243
11.9.1 定义PlayerController 243
11.9.2 创建布局文件video_player_controller_layout.xml 244
11.9.3 成员变量及构造函数的实现 245
11.9.4 实现createHandler( )方法 246
11.9.5 实现initView( )方法 249
11.9.6 实现initListener( )方法 250
11.9.7 实现bind( )方法 250
11.9.8 实现unbind( )方法 252
11.10 基于ORM实现视频信息存储 253
11.10.1 定义实体VideoInfo 253
11.10.2 注册VideoInfo 253
11.10.3 创建VideoInfoRepository 253
11.11 基于JSON文件的视频列表读取 256
11.11.1 准备数据及JSON文件 256
11.11.2 读取视频列表并初始化到数据库中 256
11.12 基于PageSlider实现滑动切换视频功能 257
11.12.1 在ability_main.xml中增加PageSlider 257
11.12.2 新增VideoPlayerPageSlider-Provider类 258
11.12.3 获取登录用户的信息 261
11.12.4 通过initData( )方法初始化视频信息数据 262
11.12.5 使用initPageSlider( )方法初始化PageSlider 263
11.12.6 运行应用 264
11.13 设置导航栏的样式 264
11.14 视频信息的展示 266
11.14.1 修改video_player_controller_layout.xml 266
11.14.2 修改PlayerController 267
11.15 视频发布界面整体布局设计 268
11.15.1 修改ability_video_publish_layout.xml 268
11.15.2 获取用户信息 270
11.15.3 初始化组件 270
11.16 基于ScrollView、TableLayout实现视频选择界面 270
11.16.1 为什么没有采用拍摄并上传视频的方式 271
11.16.2 创建视频选择界面的布局文件 271
11.16.3 创建视频选择界面的AbilitySlice 272
11.16.4 跳转到视频选择界面及返回 275
11.16.5 视频发布 276
11.16.6 运行应用 277
11.17 基于ToastDialog实现发布校验与提示 277
11.18 本章小结 278
第12章 短视频App功能实现——视频展示模块
 12.1 “我的”界面整体布局 279
12.1.1 修改ability_me_layout.xml 279
12.1.2 获取用户信息 282
12.1.3 实现个人信息展示区 282
12.1.4 基于PixelMapElement实现背景图 283
12.2 基于ListContainer实现视频发布列表功能 284
12.2.1 视频列表展示区 284
12.2.2 初始化视频列表 284
12.2.3 初始化分类页签及设置TabList选择事件 285
12.2.4 基于ListContainer实现视频列表 286
12.2.5 使用VideoListItemProvider 290
12.3 基于CommonDialog实现编辑界面 291
12.3.1 继承CommonDialog 291
12.3.2 定义编辑界面的布局文件 291
12.3.3 实现编辑界面 292
12.3.4 使用编辑界面 293
12.4 删除视频 294
12.5 基于Image实现视频点赞、取消点赞功能 294
12.5.1 视频播放界面操作区布局设计 295
12.5.2 实现点赞按钮及点赞量的显示 296
12.5.3 处理视频点赞及取消点赞事件 297
12.6 基于ORM实现点赞信息存储 298
12.6.1 定义实体MeThumbsupVideoInfo 298
12.6.2 注册实体MeThumbsupVideoInfo 300
12.6.3 创建MeThumbsupVideoInfo-Repository 300
12.6.4 处理视频点赞与取消点赞操作 301
12.6.5 初始化首页数据时的点赞信息处理 302
12.7 基于ListContainer实现视频点赞列表功能 303
12.7.1 新建视频点赞列表数据项布局文件 303
12.7.2 继承BaseItemProvider用于点赞列表数据项呈现 304
12.7.3 初始化视频点赞列表 306
12.7.4 自定义TabList选择事件 306
12.8 基于Image实现视频收藏、取消收藏功能 307
12.8.1 视频播放界面操作区布局设计 308
12.8.2 实现收藏按钮及收藏量的显示 308
12.8.3 处理视频收藏及取消收藏事件 309
12.9 基于ORM实现收藏信息存储 310
12.9.1 定义实体MeFavoriteVideoInfo 310
12.9.2 注册实体MeFavoriteVideoInfo 312
12.9.3 创建MeFavoriteVideoInfo-Repository 312
12.9.4 处理视频收藏与取消收藏操作 313
12.9.5 初始化首页数据时的收藏信息处理 313
12.10 基于ListContainer实现视频收藏列表功能 314
12.10.1 新建视频收藏列表数据项布局文件 314
12.10.2 继承BaseItemProvider用于收藏列表数据项呈现 315
12.10.3 初始化视频收藏列表 317
12.10.4 自定义TabList选择事件 317
12.11 基于Button实现关注、取关功能 319
12.11.1 视频播放界面操作区布局设计 319
12.11.2 实现“关注”按钮 319
12.11.3 处理关注及取关事件 320
12.12 基于ORM实现关注信息存储 321
12.12.1 定义实体UserFollowInfo 321
12.12.2 注册实体UserFollowInfo 322
12.12.3 创建UserFollowInfoRepository 322
12.12.4 处理关注与取关操作 323
12.12.5 初始化首页数据时的关注信息处理 324
12.13 基于ListContainer实现关注列表功能 324
12.13.1 新建关注列表数据项布局文件 325
12.13.2 继承BaseItemProvider用于关注列表数据项呈现 326
12.13.3 初始化关注列表 327
12.13.4 自定义TabList选择事件 328
12.14 基于CommonDialog实现评论窗口功能 329
12.14.1 增加评论等组件 329
12.14.2 创建基于CommonDialog的评论窗口 330
12.14.3 实现评论列表 334
12.14.4 使用评论窗口 337
12.15 基于ORM实现评论信息存储 339
12.15.1 定义实体CommentInfo 339
12.15.2 注册实体CommentInfo 339
12.15.3 创建CommentInfoRepository 340
12.15.4 存储评论信息 340
12.15.5 从数据库中获取评论信息 341
12.16 如何实现简易版播放器 341
12.16.1 创建界面布局文件 341
12.16.2 实现简易版播放器 341
12.17 实现视频预览 345
12.17.1 实现“我的”作品预览 345
12.17.2 实现“我的”点赞预览 345
12.17.3 实现“我的”收藏预览 346
12.18 实现沉浸式用户体验 347
12.19 本章小结 347
附录A 本书所涉及的技术及软件版本

读者评论

赶紧抢沙发哦!

我要评论

作者介绍

柳伟卫 在多家知名 IT 公司担任项目经理、架构师、高级开发顾问等职位,具有多年软件开发管理及系统架构经验。负责过多个省、国家级大型分布式系统的设计与研发,参与了多个大型项目的微服务架构的技术改造,在实际工作中,积累了大量的分布式系统及微服务架构经验。业余时间创建了 waylau.com 网站,用于分享个人技术心得。喜欢开源,长期跃于各大开源社区,是 CSDN、 开源中国、云栖社区等技术社区专家。为开源社区无私编著了《Spring Framework 4.x参考文档》、《Netty 实战(精髓)》、《REST 实战》、《分布式 Java》、《Spring Boot 教程》、《Spring Security 教程》、《Thymeleaf 教程》等近30余篇技术教程,广受网友好评。其中出版了《分布式系统常用技术及案例分析》、《Spring Boot 企业级应用开发实战》、《Spring Cloud 微服务架构开发实战》等专著。

相关图书

人邮微信
本地服务
人邮微信
教师服务
二维码
读者服务
读者服务
返回顶部
返回顶部