Java 7中的模块系统基本概念有哪些呢?

4周前 (11-10 07:01)阅读10回复0
王富贵
王富贵
  • 管理员
  • 注册排名5
  • 经验值59390
  • 级别管理员
  • 主题11878
  • 回复0
楼主

  模块化是处理复杂性问题很重要的东西。把应用分红差别的部门(模块、库、包、子项目和组件),再别离停止计算,是行之有效的体例。模块化的最末目标是能定义出一套API用于模块间的沟通。

若是模块间所有的通信都只通过那种API来实现,那么模块是松耦合的,于是:改动某个模块的实现会很容易,开发和测试各个模块能很容易独立开来,面向对象形式也是类似的事理。

  在OOP中,抱负的情况是拥有大量小的、可重用的、简单并别离优良的对象。在模块系统中,就能够完美地实现小的、可重用的、简单并别离优良的模块。它们的设法和最后的动机是完全一样的,只是规模有所差别。

逻辑别离传统上,Java中有两种法子来实现模块化。

  逻辑别离是最天然的体例。它包罗将应用法式朋分成逻辑模块(子项目),最初再摆设成一个完好的应用。通过定义准确的包来实现逻辑别离也是可能的,但更通用的法子是把应用朋分成一些存档文件(也就是JAR包)。逻辑别离里能促进模块的重用,有助实现模块间的松耦合。

  你以至有可能定义一个API,然后颁布发表所有模块间的通信都要通过那个给定的API来实现。如许的设法有个大问题,那就是你很难强破各人都接纳那种限造性用法,并且没有任何一种机造可以确保那个API的用法。你也没法把那些应用通过给定模块来利用的类和做为公共API一部门的类区分隔来。

  若是一个类是“ 公共的”,那它就能够被任何其他类利用,无论挪用它的阿谁类属于哪个模块。另一方面,受庇护的或者包级可见性的类在其模块内部的挪用也有限造。凡是来说,涵盖了一些包以及包中类的模块需要可以互相挪用。因而即便某个应用是由一些逻辑模块构成,但若是那些模块是耦合的,那么别离也底子没有用途。

物理别离别的一个传统的法子就是物理上的别离。你能够通过将应用朋分成差别的组件,然后把每个组件摆设到差别的JVM上而实现别离。那些组件间通过长途拜候机造停止通信,好比RMI、CORBA或者WebServices。物理别离实现了别离,也实现了松耦合,但负面影响是开收很大。

  为实现别离而专门接纳长途拜候机造,有点杀鸡用牛刀的味道。那会增加开发和摆设没必要要的复杂性,性能上所遭到的影响也不克不及轻忽的。

模块系统的感化位于逻辑别离和物理别离之间。它强调模块别离,但各个模块仍然摆设到统一个JVM中,并且模块间的通信由简单传统的办法挪用构成,因而不会有运行 时的开收承担。

  在Java生态系统中更流行的模块框架是OSGi。它是一个成熟的标准,具有几个差别的实现。在OSGi中,模块被称做bundle,每个 bundle等同于一个JAR。每个bundle也包罗一个META-INF/MANIFEST。MF文件,那个文件会颁布发表导出哪些包(package) 以及导入哪些包。

0
回帖

Java 7中的模块系统基本概念有哪些呢? 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息