快速业务通道

模块化Java简介 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

模块化Java简介

时间:2011-03-25 infoq Alex Blewitt 译:宋玮

在过去几年,Java模块化一直是一个活跃的话题。从JSR 277(现已废止)到JSR 291 ,模块化看起来是Java进化过程中的必经一环。即便是基于JVM的未来语言,比如Scala, 也考虑了模块化的问题。本文是关于模块化Java系列文章中的第一篇,讨论模块化的含义 ,以及为什么要关注它。

什么是模块化?

模块化是个一般概念,这一概念也适用于软件开发,可以让软件按模块单独开发,各 模块通常都用一个标准化的接口来进行通信。实际上,除了规模大小有区别外,面向对象 语言中对象之间的关注点分离与模块化的概念基本一致。通常,把系统划分外多个模块有 助于将耦合减至最低,让代码维护更加简单。

Java语言并不是按照模块化思想设计的(除了package,按照Java语言规范 introduction一节的介绍,package类似于Modula-3模块),但是在Java社区依然有很多 实际存在的模块。任何一个Java类库实际上都是一个模块,无论其是Log4J、Hibernate还 是Tomcat。通常,开源和非开源的应用都会依赖于一个或多个外部类库,而这种依赖关系 又有可能传递到其他类库上。

类库也是模块

类库毫无疑问也是模块。对于类库来讲,可能没有一个单一接口与之通信,但往往却 有‘public’ API(可能被用到)和‘private’ package(文档中说明了其用途)。此 外,它们也有自己依赖的类库(比如JMX或JMS)。这将引起自动依赖管理器引入许多并非 必须的类库:以Log4J-1.2.15为例,引入了超过10个依赖类库(包括javax.mail和 javax.jms),尽管这些类库中有不少对于使用Log4J的程序来说根本不需要。

某些情况下,一个模块的依赖可以是可选的;换句话说,该模块可能有一个功能子集 缺少依赖。在上面的例子中,如果JMS没有出现在运行时 classpath中,那么通过JMS记录 日志的功能将不可用,但是其他功能还是可以使用的。(Java通过使用延迟链接—— deferred linking来达到这一目的:直到要访问一个类时才需要其出现,缺少的依赖可以 通过ClassNotFoundException来处理。其他一些平台的弱链接——weak linking概念也是 做类似的运行时检查。)

通常,模块都附带一个版本号。许多开源项目生成的发行版都是以类似log4j- 1.2.15.jar的方式命名的。这样开发者就可以在运行时通过手动方式来检测特定开源类库 的版本。可是,程序编译的时候可能使用了另一个不同版本的类库:假定编译时用log4j -1.2.3.jar而运行时用log4j-1.2.15.jar,程序在行为上依然能够保持兼容。即使升级到 下一个小版本,仍然是兼容的(这就是为什么log4j 1.3 的问题会导致一个新分支2.0产 生,以表示兼容性被打破)。所有这些都是基于惯例而非运行时已知约束。

模块化何时能派上用场?

作为一般概念,模块化有助于将应用分解为不同的部件,各个部件可以单独测试(和 开发)。正如上面所提到的,大多数类库都是模块。那么,对于那些生产类库提 供给别 人使用的人来说,模块化是一个非常重要的概念。通常,依赖信息是在构建工具(maven pom 或 ivy-module)里进行编码并被明确记录在类库使用文档中的。另外,高层类库开 发过程中需要修改较低层级类库bug,以提供更好支持的情况并不少见,即便低层类库的 最新版本已经对bug进行了修正。(可是有时候这种情况可能会导致出现一些微妙的问题 。)

如果一个类库是提供给他人使用的,那么它就已经是一个模块了。但是世上鲜有 “Hello World”这样的类库,也鲜有“Hello World”这样的模块。只有当应用足够大时 (或者是用一个模块化构建系统进行构建时),把应用划分为不同部件的概念就派上用场 了。

模块化的好处之一是便于

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号