热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java模块化系统实践_Java9模块化开发:核心原则与实践

前言1第一部分Java模块系统介绍第1章模块化概述81.1什么是模块化91.2在Java9之前101.2.1将JAR作为模块?111.2.2类路径地狱131.3Jav

前言1

第一部分 Java模块系统介绍

第1章 模块化概述8

1.1 什么是模块化9

1.2 在Java 9之前10

1.2.1 将JAR作为模块?11

1.2.2 类路径地狱13

1.3 Java 9模块14

第2章 模块和模块化JDK18

2.1 模块化JDK19

2.2 模块描述符22

2.3 可读性23

2.4 可访问性24

2.5 隐式可读性25

2.6 限制导出29

前言1

第一部分 Java模块系统介绍

第1章 模块化概述8

1.1 什么是模块化9

1.2 在Java 9之前10

1.2.1 将JAR作为模块?11

1.2.2 类路径地狱13

1.3 Java 9模块14

第2章 模块和模块化JDK18

2.1 模块化JDK19

2.2 模块描述符22

2.3 可读性23

2.4 可访问性24

2.5 隐式可读性25

2.6 限制导出29

2.7 模块解析和模块路径29

2.8 在不使用模块的情况下使用模块化JDK31

第3章 使用模块33

3.1 第一个模块33

3.1.1 剖析模块33

3.1.2 命名模块35

3.1.3 编译36

3.1.4 打包37

3.1.5 运行模块37

3.1.6 模块路径39

3.1.7 链接模块40

3.2 任何模块都不是一座孤岛41

3.2.1 EasyText示例介绍41

3.2.2 两个模块43

3.3 使用平台模块46

3.3.1 找到正确的平台模块46

3.3.2 创建GUI模块47

3.4 封装的限制51

第4章 服务54

4.1 工厂模式54

4.2 用于实现隐藏的服务57

4.2.1 提供服务57

4.2.2 消费服务59

4.2.3 服务生命周期61

4.2.4 服务提供者方法62

4.3 工厂模式回顾64

4.4 默认服务实现65

4.5 服务实现的选择66

4.6 具有服务绑定的模块解析68

4.7 服务和链接70

第5章 模块化模式73

5.1 确定模块边界74

5.2 精益化模块76

5.3 API模块76

5.3.1 API模块中应该包含什么77

5.3.2 隐式可读性78

5.3.3 带有默认实现的API模块81

5.4 聚合器模块82

5.4.1 在模块上构建一个外观83

5.4.2 安全拆分模块84

5.5 避免循环依赖86

5.5.1 拆分包86

5.5.2 打破循环87

5.6 可选的依赖关系90

5.6.1 编译时依赖关系91

5.6.2 使用服务实现可选依赖关系95

5.7 版本化模块96

5.8 资源封装99

5.8.1 从模块加载资源100

5.8.2 跨模块加载资源101

5.8.3 使用ResourceBundle类102

第6章 高级模块化模式104

6.1 重温强封装性104

6.1.1 深度反射105

6.1.2 开放式模块和包106

6.1.3 依赖注入109

6.2 对模块的反射111

6.2.1 内省112

6.2.2 修改模块113

6.2.3 注释114

6.3 容器应用程序模式115

6.3.1 层和配置116

6.3.2 层中的类加载119

6.3.3 插件体系结构122

6.3.4 容器体系结构127

6.3.5 解析容器中的平台模块132

第二部分 迁移

第7章 没有模块的迁移134

7.1 类路径已经“死”了?135

7.2 库、强封装和JDK 9类路径135

7.3 编译和封装的API138

7.4 删除的类型141

7.5 使用JAXB和其他Java EE API142

7.6 jdk.unsupported模块145

7.7 其他更改146

第8章 迁移到模块148

8.1 迁移策略148

8.2 一个简单示例149

8.3 混合类路径和模块路径150

8.4 自动模块152

8.5 开放式包155

8.6 开放式模块157

8.7 破坏封装的VM参数158

8.8 自动模块和类路径158

8.9 使用jdeps161

8.10 动态加载代码164

8.11 拆分包166

第9章 迁移案例研究:Spring和Hibernate167

9.1 熟悉应用程序167

9.2 使用Java 9在类路径上运行172

9.3 设置模块173

9.4 使用自动模块174

9.5 Java平台依赖项和自动模块176

9.6 开放用于反射的包176

9.7 解决非法访问问题177

9.8 重构到多个模块178

第10章 库迁移180

10.1 模块化之前181

10.2 选择库模块名称181

10.3 创建模块描述符184

10.4 使用模块描述符更新库186

10.5 针对较旧的Java版本187

10.6 库模块依赖关系188

10.6.1 内部依赖关系188

10.6.2 外部依赖关系191

10.7 针对多个Java版本192

10.7.1 多版本JAR192

10.7.2 模块化多版本JAR195

第三部分 模块化开发工具

第11章 构建工具和IDE198

11.1 Apache Maven198

11.1.1 多模块项目200

11.1.2 使用Apache Maven创建EasyText示例200

11.1.3 使用Apache Maven运行模块化的应用程序204

11.2 Gradle205

11.3 IDE205

第12章 测试模块207

12.1 黑盒测试208

12.2 使用JUnit进行黑盒测试210

12.3 白盒测试212

12.4 测试工具216

第13章 使用自定义运行时映像进行缩减217

13.1 静态链接和动态链接218

13.2 使用jlink219

13.3 查找正确的服务提供者模块223

13.4 链接期间的模块解析223

13.5 基于类路径应用程序的jlink224

13.6 压缩大小225

13.7 提升性能227

13.8 跨目标运行时映像228

第14章 模块化的未来229

14.1 OSGi230

14.2 Java EE232

14.3 微服务232

14.4 下一步233



推荐阅读
  • 标题: ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • position属性absolute与relative的区别和用法详解
    本文详细解读了CSS中的position属性absolute和relative的区别和用法。通过解释绝对定位和相对定位的含义,以及配合TOP、RIGHT、BOTTOM、LEFT进行定位的方式,说明了它们的特性和能够实现的效果。同时指出了在网页居中时使用Absolute可能会出错的原因,即以浏览器左上角为原始点进行定位,不会随着分辨率的变化而变化位置。最后总结了一些使用这两个属性的技巧。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
author-avatar
南昌思锐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有