JDK9 之模塊化

Java 9 特性以及解決的問題

我們將探討關於Java 9模塊化系統的以下主題:

1.介紹
Oracle 將Java 9從2017年3月延期到2017年9月進行發行。

我們知道, Java SE 8提供了三大新特性(加上少量改進和新特性)。

  • Lambda 表達式
  • Stream API
  • Date API
    同樣地, Java SE 9提供了三大新特性(加上少量改進和新特性):
  • Java模塊系統(Jigsaw項目)
  • Java REPL(交互式編程)
  • Milling project coin(主要是語法改進的一個項目,Java7的時候就已經開始)

2.JavaSe9之Jigsaw Project

Jigsaw項目的主要目標:
  • 模塊化JDK

    我們知道,當前JDK系統是很大的。因此他們決定劃分JDK成小模塊得到一定數量的好處

  • 模塊化源代碼

    當前原始代碼jar文件是非常大的,特別是rt.jar是相當的大。 因此他們劃分Java原始代碼成更小的模塊。

  • 模塊化執行時間的影像

    這個特性的主要目標是“調整JDK和JRE執行時間的影像系統的支撐”。

  • 壓縮大部分內部的API

    這個特性的主要目標是“使大多JDK的內部APIs不能進入,但是留下一些重要,用途廣泛的內部的APIs”。

  • Java平臺模塊系統

    這個特性的主要目標“允許用戶創造他們的模塊開發他們的應用”。

  • jlink :Java連接器
    這個jlink工具的主要目標“允許用戶在他們的應用中創建可執行文件。

3.當前Java系統的問題

  • Java SE 8或更加早期的系統在開發或提供Java應用時有以下問題:

    1. 因爲JDK是太大的,對於小設備很難進行等比例縮減。Java SE 8提出了3種緊湊類型解決這個問題:compact1、compact2和compact3。 但是這個問題並沒有得到有效的解決。

      1. Jar文件,像rt.jar等jar文件太大的以至於不能使用在小設備和應用中。

      2. 因爲JDK是太大的,我們的應用或設備不能支持更好的平臺.

      3. 由於修飾符是public的緣故,每個人都可以通過此來進行訪問,所以在當前Java系統的封閉性不是很強。

      4. 由於JDK,Jre過於龐大,以至於很難進行測試和維護應用。

      5. 由於public的關係,Java比較開放。不可避免的能訪問象sun..internal.*等的一些內部不重要的APIs。

  • 由於上述關係,用戶可以訪問到一些內部的api,所以安全性方面也是一個大問題。

    1. 應用太大。

    2. 組件間的鬆耦合的支持稍微薄弱

4.Java9模塊系統的特性
爲了解決所有這些問題, 所以Oracle Corp在Java SE 9中發佈了Java SE 9模塊系統.

  • 在Java SE 9中分離了JDK, JRE,jar等爲更小的模。因此我們可以方便的使用任何我們想要的模塊。因此縮減Java應用程序到小設備是非常容易的。

  • 更加容易的測試和維護

  • 支持更好的平臺

  • public不再僅僅是public。現在已經支持非常強的封閉性(不用擔心,後邊我們會用幾個例子來解釋)。

  • 我們不能再訪問內部非關鍵性APIs了。

  • 模塊可以非常安全地幫助我們掩藏那些我們不想暴露的內部細節,我們可以得到更好的Security.

  • 應用會變的非常小,因爲我們可以只使用我們要用的模塊。

  • 組件間的鬆耦合變得非常容易。

  • 更容易支持唯一責任原則(SRP)。

5.Jdk9和Jdk8的對比
我們知道JDK軟件都包含什麼。在安裝JDK 8軟件以後,我們能看到目錄中包含bin、jre、lib等解壓在Java主目錄中。在Jdk9中,Oracle Corp稍微改變了這個文件夾的結構如下所示:
這裏寫圖片描述

  • JDK 8文件夾結構:
  • JDK 9文件夾結構:
    這裏寫圖片描述
    我們可以發現在JDK 9中不包含JRE的。 JRE被分離到一個分開的文件夾。 但是JDK 9軟件包含一個新的文件夾“jmods”。它包含一套Java 9模塊,如下所示:
    在JDK 9,沒有rt.jar和tools.jar文件。
    jmods文件夾
  • 注:截止到今天, “jmods”包含98個模塊。在後續的版本也許會增加。 “jmods”文件夾在$ {JAVA_HOME}
    /jmods中才可用。這些叫JDK Modules. *

6.Java9模塊化是什麼?
Java9中的模塊是代碼、數據和有些資源的自描述的集合。它是一套相關package、type(類、抽象類,接口等)與代碼&數據和資源。
這裏寫圖片描述
7.Java9模塊化系統之母

到現在爲止Java 9模塊系統提供了98個模塊。 並且Oracle Corp已經分離JDK的jars和Java SE規格到兩套Modules裏.
  • 所有的JDK Mdoules與 “jdk.*”一起啓動。
  • 所有Java SE規格模塊與“java.*”一起啓動。
  • Java 9模塊系統有一個“java.base”模塊。它叫作基本的模塊。 它是一個獨立模塊並且沒有依賴於所有其他模塊。 默認情況下,其他模塊依賴於這個模塊。
    所以“java.base”模塊是被成爲Java9模塊化系統之母。

它是所有JDK模塊和用戶定義的Modules的默認模塊.

8.Java9和Java8程序的對比。

使用Java 5,6,7或者8.,我們已經開發了許多Java應用程序。我們知道Java 8或更早的應用是什麼樣的,包含什麼東西。

簡而言之,Java 8的應用會是如下所示:
這裏寫圖片描述

Java 9的應用與之前的沒有太多的不同。 他只是引入了一個新的組件叫module,如果你要用它就需要將相關聯的包集合分組到同一個組中。再有就是module修飾符(“module-info.java”).

應用的其餘同初期版本應用一樣如下所示:
這裏寫圖片描述
像Java 8應用一樣,頂層組件是package,在Java9中則使用module作爲頂層組件。
簡而言之,我們可以說Java 9模塊包含以下主要部分:

  • one Module
  • Module Name
  • Module Descriptor(描述符)
  • 包集合
  • Types和Resources集合

**本文來自:

java model解惑

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