返回首页
苏宁会员
购物车 0
易付宝
手机苏宁

服务体验

店铺评分与同行业相比

用户评价:----

物流时效:----

售后服务:----

  • 服务承诺: 正品保障
  • 公司名称:
  • 所 在 地:

  • 深入理解Java模块系统 (德)尼科莱·帕洛格 著 张悦,黄礼骏,张海深 译 专业科技 文轩网
  • 新华书店正版
    • 作者: (德)尼科莱·帕洛格著 | | 张悦,黄礼骏,张海深译
    • 出版社: 人民邮电出版社
    • 出版时间:2021-01-01 00:00:00
    送至
  • 由""直接销售和发货,并提供售后服务
  • 加入购物车 购买电子书
    服务

    看了又看

    商品预定流程:

    查看大图
    /
    ×

    苏宁商家

    商家:
    文轩网图书旗舰店
    联系:
    • 商品

    • 服务

    • 物流

    搜索店内商品

    商品分类

         https://product.suning.com/0070067633/11555288247.html

     

    商品参数
    • 作者: (德)尼科莱·帕洛格著| 张悦,黄礼骏,张海深译
    • 出版社:人民邮电出版社
    • 出版时间:2021-01-01 00:00:00
    • 版次:1
    • 印次:1
    • 印刷时间:2021-01-01
    • 字数:550000
    • 页数:372
    • 开本:16开
    • 装帧:平装
    • ISBN:9787115552341
    • 国别/地区:中国
    • 版权提供:人民邮电出版社

    深入理解Java模块系统

    作  者:(德)尼科莱·帕洛格 著 张悦,黄礼骏,张海深 译
    定  价:119
    出 版 社:人民邮电出版社
    出版日期:2021年01月01日
    页  数:372
    装  帧:平装
    ISBN:9787115552341
    主编推荐

    从设计动机、基本概念到高级特性,全面解析Java模块系统; 基于Java 9,适用于Java 10、Java 11版本。 剖析模块化Java应用程序 构建模块--从源代码到JAR 迁移到模块化Java 解耦依赖以及改进API 处理反射和版本 自定义运行时镜像 将代码打包成整洁、定义良好的单元,会使交付安全可靠的应用程序变得更加容易,而Java平台模块系统(JPMS)是创建这种代码单元的语言标准。通过模块,你可以严密地控制JAR的交互方式,并在启动时轻松识别任何依赖缺失。这种设计上的转变非常重要,以至于从Java 9开始,所有核心Java API都以模块的形式来分发,库、框架和应用程序也将从中受益。 本书是创建和使用Java模块的指南。书中通过具体的例子和通俗易懂的图表,剖析了模块化Java应用程序,阐释了设计模块、调试模块化应用程序以及将其部署到生产环境的操作实践。读者不仅会深入理null

    内容简介

    本书从Java模块系统的设计动机和基本概念讲起,一直延伸至其高级特性,详尽介绍了模块系统的基本机制,以及如何创建、构建和运行模块化应用程序。本书还会帮助你将现有项目迁移到Java 9及以上版本,并逐步将之模块化。书中主要内容包括:从源代码到JAR来构建模块、迁移到模块化Java、解耦依赖以及改进API、处理反射和版本、自定义运行时镜像,等等。 本书适合有Java经验的开发者阅读。

    作者简介

    张海深,曾任职于京东、EMC、亚马逊等一线互联网公司,高级架构师,拥有十余年开发和管理经验,熟悉分布式存储、中间件、区块链等领域。

    精彩内容

    目录
    第一部分你好,模块
    第1章第一块拼图2
    1.1什么是模块化3
    1.1.1用图将软件可视化3
    1.1.2设计原则的影响5
    1.1.3什么是模块化6
    1.2Java9之前的模块擦除6
    1.3Java9之前的问题9
    1.3.1JAR之间未言明的依赖9
    1.3.2同名类的覆盖10
    1.3.3同一项目不同版本间的冲突12
    1.3.4复杂的类加载13
    1.3.5JAR的弱封
    1.3.6手动安全检查14
    1.3.7较差的启动性能15
    1.3.8死板的Java运行时环境15
    1.4鸟瞰模块系统15
    1.5你的第一个模块17
    1.5.1模块系统实战18
    1.5.2非模块化项目基本不受影响21
    1.6模块系统的目标22
    1.6.1可靠配置:不放过一个JAR23
    1.6.2强封装:控制模块内部代码的访问权限23
    1.6.3自动化的安全性和改善的可维护性24
    1.6.4改善的启动性能24
    1.6.5可伸缩的Java平台24
    1.6.6非目标25
    1.7新旧技能25
    1.7.1你将学到什么25
    1.7.2你应该知道些什么26
    1.8小结27
    第2章模块化应用程序剖析28
    2.1初识ServiceMonitor28
    2.2模块化ServiceMonitor32
    2.3将ServiceMonitor划分为模块32
    2.4文件的目录结构布局33
    2.5声明和模块描述34
    2.5.1声明模块依赖36
    2.5.2定义模块的公有API36
    2.5.3用模块图可视化ServiceMonitor36
    2.6编译和打包模块37
    2.7运行ServiceMonitor39
    2.8扩展模块化代码库39
    2.9总结:模块系统的效果40
    2.9.1模块系统能为你做什么40
    2.9.2模块系统还能为你做些什么41
    2.9.3允许可选依赖43
    2.10小结44
    第3章定义模块及其属性45
    3.1模块:模块化应用程序的基石46
    3.1.1随JDK发布的Java模块(JMOD)46
    3.1.2模块化JAR:内生模块46
    3.1.3模块声明:定义模块的属性47
    3.1.4模块的众多类型51
    3.2可读性:连接所有片段53
    3.2.1实现可靠配置54
    3.2.2用不可靠配置进行实验55
    3.3可访问性:定义公有API60
    3.3.1实现强封装62
    3.3.2封装传递依赖63
    3.3.3封装的小冲突64
    3.4模块路径:让Java了解模块68
    3.4.1模块解析:分析和验证应用程序的结构69
    3.4.2模块图:展示应用程序结构71
    3.4.3向图中添加模块73
    3.4.4向图中添加边74
    3.4.5访问性是一项持续的工程74
    3.5小结75
    第4章从源码到JAR构建模块76
    4.1组织项目的目录结构76
    4.1.1新提议——新约定77
    4.1.2默认的目录结构77
    4.1.3模块声明的位置78
    4.2编译单个模块79
    4.2.1编译模块代码79
    4.2.2模块或非模块80
    4.3编译多个模块82
    4.3.1直接编译82
    4.3.2模块源代码路径:将项目结构告知编译器83
    4.3.3星号作为模块名称的标记84
    4.3.4多模块源路径入口85
    4.3.5设置初始模块85
    4.3.6值得吗86
    4.4编译器选项87
    4.5打包模块化JAR88
    4.5.1快速回顾jar工具88
    4.5.2分析JAR89
    4.5.3定义模块入口点89
    4.5.4归档选项90
    4.6小结91
    第5章运行和调试模块化应用程序92
    5.1通过JVM启动模块化应用程序92
    5.1.1指定主类93
    5.1.2如果初始模块并非主模块93
    5.1.3向应用程序传递参数95
    5.2从模块中加载资源95
    5.2.1Java9之前的资源加载96
    5.2.2Java9及以上版本的资源加载97
    5.2.3跨越模块边界加载包中资源98
    5.3调试模块及模块化应用程序99
    5.3.1分析单个模块99
    5.3.2验证模块集100
    5.3.3验证模块图101
    5.3.4列出可见模块及其依赖102
    5.3.5在解析过程中排除模块104
    5.3.6通过日志信息观察模块系统106
    5.4Java虚拟机选项109
    5.5小结110
    第二部分改写现实世界中的项目
    第6章迁移到Java9及以上版本的兼容性挑战112
    6.1使用JEE模块113
    6.1.1为什么JEE模块很特殊114
    6.1.2人工解析JEE模块115
    6.1.3JEE模块的第三方实现116
    6.2转化为URLClassLoader117
    6.2.1应用程序类加载器的变化117
    6.2.2不再通过URLClassLoader来获得类加载器118
    6.2.3寻找制造麻烦的强制类型转换119
    6.3更新后的运行时镜像目录布局119
    6.4选择、替换和扩展平台121
    6.4.1不再支持紧凑配置121
    6.4.2扩展机制被移除122
    6.4.3授权标准覆盖机制被移除122
    6.4.4某些启动类路径选项被移除122
    6.4.5不支持Java5编译122
    6.4.6JRE版本选择被移除123
    6.5一着不慎,满盘皆输123
    6.5.1新的版本字符串123
    6.5.2工具减少124
    6.5.3琐碎的事情125
    6.5.4Java9、Java10和Java11中新废弃的功能125
    6.6小结125
    第7章在Java9及以上版本中运行应用程序时会反复出现的挑战127
    7.1内部API的封装128
    7.1.1微观视角下的内部API129
    7.1.2使用JDeps分析依赖131
    7.1.3编译内部API133
    7.1.4运行内部API134
    7.1.5访问内部API的编译器和JVM选项138
    7.2修复包分裂139
    7.2.1包分裂的问题是什么141
    7.2.2包分裂的影响141
    7.2.3处理包分裂的多种方法144
    7.2.4扩展模块:处理包分裂的最后手段145
    7.2.5使用JDeps查找分裂的包146
    7.2.6关于依赖版本冲突的说明147
    7.3小结147
    第8章增量模块化现有项目149
    8.1为什么选择增量模块化150
    8.1.1如果每个JAR都必须是模块化的150
    8.1.2让普通JAR和模块化JAR混搭150
    8.1.3增量模块化的技术基础151
    8.2无名模块(类路径)152
    8.2.1无名模块捕获的类路径混乱154
    8.2.2无名模块的模块解析155
    8.2.3取决于无名模块156
    8.3自动模块:模块路径上的普通JAR158
    8.3.1自动模块名称:小细节,大影响159
    8.3.2自动模块的模块解析162
    8.3.3无条件选择自动模块168
    8.3.4依赖自动模块169
    8.4小结170
    第9章迁移和模块化策略172
    9.1迁移策略172
    9.1.1更新准备173
    9.1.2工作量评估173
    9.1.3基于Java9及以上版本持续构建175
    9.1.4关于命令行选项的领悟178
    9.2模块化策略180
    9.2.1自下而上的模块化:如果项目的所有依赖都已模块化182
    9.2.2自上而下的模块化:如果应用程序无法等待其依赖182
    9.2.3由内而外的模块化:如果项目位于中间层级183
    9.2.4在项目中应用这些策略184
    9.3将JAR模块化185
    9.3.1作为中间步骤的开放式模块185
    9.3.2使用JDeps生成模块声明186
    9.3.3黑客破译第三方JAR188
    9.3.4发布Java8及更老版本的模块化JAR190
    9.4小结192
    第三部分模块系统高级特性
    第10章用服务来解耦模块194
    10.1探索对服务的需求194
    10.2JPMS中的服务196
    10.2.1使用、提供和消费服务196
    10.2.2服务的模块解析201
    10.3良好地设计服务203
    10.3.1可以作为服务的类型204
    10.3.2将工厂用作服务204
    10.3.3从全局状态中隔离消费者206
    10.3.4将服务、消费者和提供者组织成模块208
    10.3.5使用服务打破循环依赖209
    10.3.6在不同的Java版本中声明服务211
    10.4使用ServiceLoaderAPI访问服务213
    10.4.1加载和访问服务213
    10.4.2服务加载的特性215
    10.5小结216
    第11章完善依赖关系和API218
    11.1隐式可读性:传递依赖219
    11.1.1公开模块的依赖219
    11.1.2传递修饰符:依赖的隐式可读性221
    11.1.3何时使用隐式可读性223
    11.1.4何时依赖隐式可读性223
    11.1.5基于隐式可读性重构模块225
    11.1.6通过合并模块来重构228
    11.2可选依赖229
    11.2.1可靠配置的难题229
    11.2.2静态修饰符:标记可选依赖230
    11.2.3可选依赖的模块解析231
    11.2.4针对可选依赖编写代码232
    11.3合规导出:将可访问性在指定的模块中234
    11.3.1公开内部API235
    11.3.2将包导出给模块236
    11.3.3什么时候使用合规导出238
    11.3.4通过命令行导出包239
    11.4小结240
    第12章模块化世界中的反射241
    12.1为何exports指令不能很好地适用于反射243
    12.1.1深入非模块化代码243
    12.1.2使内部类型强制公有243
    12.1.3合规导出导致对具体模块的耦合244
    12.1.4不支持深反射244
    12.2开放式包和模块:为反射而生245
    12.2.1为运行时访问开放式包245
    12.2.2为特定模块开放式包246
    12.2.3导出包与开放式包的对比247
    12.2.4开放式模块:批量反射248
    12.3针对模块进行反射249
    12.3.1更新模块的反射代码(或不更新)249
    12.3.2使用变量句柄代替反射251
    12.3.3通过反射分析模块属性253
    12.3.4通过反射修改模块属性255
    12.3.5转发开放式包256
    12.4动态创建带有层的模块图257
    12.4.1什么是层258
    12.4.2分析模块层260
    12.4.3创建模块层262
    12.5小结266
    第13章模块版本:可能和不可能268
    13.1JPMS中缺乏版本支持268
    13.1.1不支持多版本269
    13.1.2不支持版本选择271
    13.1.3未来会怎样273
    13.2记录版本信息273
    13.2.1在构建模块时记录版本273
    13.2.2访问模块版本274
    13.3在不同的层中运行同一个模块的多个版本276
    13.3.1为什么需要一个添加额外层的启动器277
    13.3.2为你的应用程序、ApacheTwill和CassandraJavaDriver启动层277
    13.4小结280
    第14章通过jlink定制运行时镜像281
    14.1创建自定义运行时镜像282
    14.1.1jlink入门282
    14.1.2镜像内容和结构283
    14.1.3在运行时镜像中包含服务284
    14.1.4用jlink和jdeps调整镜像大小287
    14.2创建独立的应用程序镜像288
    14.2.1在镜像中包含应用程序模块289
    14.2.2为应用程序生成一个本地启动程序292
    14.2.3安全性、性能和稳定性293
    14.3生成跨操作系统的镜像294
    14.4使用jlink插件优化镜像295
    14.4.1jlink的插件295
    14.4.2减小镜像尺寸297
    14.4.3提高运行时性能301
    14.5jlink选项301
    14.6小结302
    第15章完成拼图304
    15.1为ServiceMonitor添加装饰304
    15.1.1多样化依赖307
    15.1.2降低的可见性308
    15.1.3通过服务解耦308
    15.1.4在运行时通过层来加载代码308
    15.1.5处理对普通JAR的依赖309
    15.2模块化应用程序小贴士309
    15.2.1是否模块化309
    15.2.2理想的模块310
    15.2.3注意模块声明314
    15.2.4更改模块声明可能破坏代码316
    15.3技术前景318
    15.3.1Maven、Gradle以及其他构建工具318
    15.3.2OSGi320
    15.3.3微服务323
    15.4关于模块化生态系统的思考325
    15.5小结325
    附录A类路径回顾326
    附录B反射API的高级介绍328
    附录C通过统一日志观察JVM331
    附录D利用JDeps分析项目的依赖336
    附录E通过多发行版JAR支持多个Java版本343

    售后保障

    最近浏览

    猜你喜欢

    该商品在当前城市正在进行 促销

    注:参加抢购将不再享受其他优惠活动

    x
    您已成功将商品加入收藏夹

    查看我的收藏夹

    确定

    非常抱歉,您前期未参加预订活动,
    无法支付尾款哦!

    关闭

    抱歉,您暂无任性付资格

    此时为正式期SUPER会员专享抢购期,普通会员暂不可抢购