主题 : 在Java 9的到来之前,先了解新的模块化的规格和功能
级别: 白丁
UID: 74003
积分:7 加为好友
威望: 0 精华: 0
主题:6 回复:9
注册时间:2015-04-10
在线时长:0
1#   发表于:2015-05-27 14:09:41  IP:14.95.*.*

    本文提供的建议,规范的概述,旨在使Java技术在Java 9的模块化平台。我将讨论促进一个更加模块化的Java体系结构的需求因素,简要介绍和比较,提出了解决方案,并介绍了三个模块化的Java 9更新计划,包括其在Java开发的潜在影响。

一、我们为什么需要Java模块化?

     模块化是一个广义的概念。在软件方面,它适用于写作和执行一个程序或计算机系统作为一个独特的模块,而不是单一的,单片设计。一个标准化的接口是用来使模块通信。分区环境的软件结构分成不同的模块,可以帮助我们减少耦合,优化应用程序的开发,降低系统复杂度。
模块化使程序员做功能测试的隔离和从事并行发展努力给予冲刺或项目中。这提高了效率,在整个软件开发生命周期。

一些特征属性的一个真正的模块:
1、一个一致的和独特的身份(ID模块和版本)

2、很容易地识别和发现的要求和依赖关系(标准编译和部署设施和元信息)

3、一个开放的、可理解的接口(通信协议)

4、隐藏实现细节(封装)

这是建立有效处理模块系统应该做到以下几点:

1、编译时支持模块化和依赖性的发现

2、在一个支持易于部署和重新部署无需系统停机运行环境执行模块

3、贯彻执行生命周期是明确的和强大的

4、提供简单的注册和发现模块设备

     面向对象,面向组件和面向服务的解决方案,都试图使纯模块化。每个解决方案都有自己的一套习惯,防止它实现模块化的完善,但是。让我们简要地考虑。

二、Java类和对象的模块化构建

     没有Java面向对象的性质满足模块化的要求?毕竟,面向对象程序设计与Java的压力有时强制实现唯一性,数据封装,松耦合。而这些点是一个好的开始,注意模块化的要求,不符合Java的面向对象的框架:在对象级别的身份是不可靠的;接口不版本:和类并不是唯一的在部署水平。松耦合是一个最佳实践,但肯定不是强制的。

    在Java复用类是困难的时候,第三方的依赖是很容易被滥用。编译工具如专家寻求解决这个缺点。事后的语言习惯和构造如我们试图控制运行环境的依赖注入和控制反转帮助开发商,他们有时会成功,尤其是如果用严格的纪律。不幸的是,这种情况下叶创建模块环境到专有的框架公约和配置工作。

    Java也增加了包的命名空间和范围可见性的组合为手段,创建模块编译和部署时间机制。但这些语言特征容易回避,我会解释的。包装作为一个模块化的解决方案包试图添加一个抽象层的Java编程的景观。他们提供的设施,独特的编码名称空间和配置信息。可悲的是,虽然,包的习俗很容易被规避,常常导致一个环境危险的编译时间耦合。

目前模块化Java状态(除了OSGi)是最常用的完成包的命名空间,JavaBeans约定,和专有的框架结构。

三、不是JAR文件的模块就够了吗?

jar文件和部署的环境中,他们操作大大提高在许多传统习俗其他可用的部署。但是JAR文件没有内在的独特性,除了一个很少使用的版本号,这是隐藏在一个JAR文件清单。JAR文件和可选的清单不作为模块化的Java运行时环境公约。所以在文件及其在类路径参与类的包名是唯一的部分的罐结构,借模块的运行环境。
总之,罐子是在模块化的一个很好的尝试,但他们不满足一个真正的模块化环境的要求。喜欢春天和OSGi框架和平台的使用模式和增强罐规范提供非常有能力、模块化系统的建设环境。随着时间的推移,然而,即使是这些工具将屈服于一个非常不幸的副作用的JAR和JAR hell规范!
Classpath/JAR hell
当Java运行时环境允许任意复杂的缸加载机制,开发人员知道他们在地狱或罐中的地狱。一些配置可以导致这种情况。

Java:曾经的网络编程也是未来的国王
http2
HTTP / 2:一个Java开发者开始堆书从头学习Java

    首先,考虑一个情况下,Java应用程序开发人员提供的应用程序的更新版本,它封装在一个具有相同名称的JAR文件的旧版本。在Java运行时环境提供了确定正确的JAR文件没有验证设施。运行环境只会加载类的jar文件,发现第一或满足一个多路径规则。这导致在最意想不到的行为。

    JAR 的另一个实例出现在两个或多个应用程序或进程取决于第三方库的不同版本。使用标准的类装载设施,只有一个第三方库的版本将可在运行时,导致至少一个应用程序或进程的错误。一个功能齐全、高效的Java模块系统应便于分离成不同的代码,很容易理解,和松耦合的模块。依赖应该明确规定并严格执行。设施应该是可用的,允许模块进行升级,而无需对其他模块的影响。一个模块化的运行时环境应使,具体到一个特定的域或垂直市场的配置,从而减少启动时间和系统的环境足迹。[/font]
1 共1页