Java 9 模塊化系統簡介

我們知道,在Java 9中,一個重要的改變就是模塊化系統的引入,Java 9的模塊化系統源於Jigsaw Project,我們首先看下Jigsaw Project的實現目標:

  • 模塊化JDK:我們知道,現有JDK已經非常龐大,Jigsaw Project的目標就是將JDK分隔成一個個的小模塊。

  • 模塊化源碼:當前源碼jar文件也非常大,特別是rt.jarJigsaw Project也會考慮將源碼切分成一個個的小模塊。

  • 重構JDK和JRE運行時映像以適應模塊化的目的

  • 封裝絕大部分內部API,僅暴露幾個重要的、使用頻繁的內部API

  • 實現Java平臺的模塊化系統,允許用戶通過構建自己的模塊來開發應用程序,

  • jlink, the Java Linker:jlink工具的主要目標是" Allowing the user to create executable to their applications "

當前Java系統的主要問題

  • JDK太過於龐大以至於很難縮減應用到小的設備中去,Java 8 中通過引入三種類型的壓縮配置文件來解決這個問題:compact1, compact2, compact3,但事實上卻無法解決。

  • Jar文件比如rt.jar太大無法用於較小的設備和應用中去

  • 因爲JDK太大,導致我們的應用或者設備無法提供更好的性能

  • 當前Java系統中沒有實現很好的封裝效果,每個人都可以訪問public修飾符修飾的對象

  • 因爲JDK和JRE太過龐大,對應用的測試和維護也相對較爲困難

  • 因爲public修飾符太過開放,因此一些內部API比如:sun.*, *.internal.*也不可避免的暴露出來。

  • 正因爲用戶可以訪問內部接口,因此安全性也是一個不小的問題

  • 應用過於龐大

  • 很難支持組件之間的低耦合

Java 9 模塊化系統的優勢

  • 因爲Java 9 將JDK、JRE、JAR文件切分成了一個個的小模塊,因此,我們可以根據實際需要任意使用我們需要的模塊,並且可以很方便的通過剔除不必要的模塊,將應用部署到小的設備中去。
  • 易於測試和維護
  • 可以支持更好的性能表現
  • 兼具良好的開放與更好的封裝特性
  • 用戶將無法訪問一些主要用於內部的API接口
  • 模塊隱藏了內部細節,提供了很好的安全特性
  • 應用將更加小巧,因爲我們只需要部署用到的模塊
  • 支持組件間的低耦合
  • 支持單一責任原則(SRP, Single Responsibility Principle )

Java 8 vs Java 9

在這裏插入圖片描述

Java 8 的文件夾結構

在這裏插入圖片描述

Java 9 的文件夾結構

在這裏插入圖片描述

Java 9中不再包含rt.jar 和tool.jar,取而代之的是一個個模塊.jmod

在這裏插入圖片描述

Java 9中的模塊定義

模塊就是包含代碼、數據與資源的自描述集合。

在這裏插入圖片描述

Mother of Java 9 Module System

Oracle將JDK jars 和 Java SE 規範分成了兩個模塊集:

  • 所有的JDK模塊均以jdk.*開頭
  • 所有的Java SE規範模塊均以“java.開頭

注意,這裏面有一個java.base模塊,即我們所熟知的基礎模塊,它是一個完全獨立的模塊,並不依賴於其他任何模塊。默認情況下,所有的模塊均依賴於此模塊,這也是java.base被稱爲The Mother of Java 9 Modules的原因,它是所有JDK模塊和用戶自定義模塊的默認模塊。

Java 8 和Java 9 應用程序對比

Java 8 應用程序通常如下:
在這裏插入圖片描述

Java 9 應用程序與前者相差不大,但引入了一個新的“模塊”組件,以及一個模塊描述符module-info.java

在這裏插入圖片描述

Java 8 的應用程序中,Packages是頂層組件,Java 9應用程序中Module是作爲頂層組件。簡單來講,模塊組成要素如下:

  • One Module
  • Module Name
  • Module Descriptor
  • Set of Packages
  • Set of Types and Resources

原文鏈接

https://www.journaldev.com/13106/java-9-modules

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章