新的Java 9功能介紹
第9版給Java定義模塊的可能性。一個模塊是一個命名的,自描述的程序組件,由一個或多個包(和數據)組成。模塊可以定義如清單1所示。
模塊 de module .a { exports de。module .a.paket.x;}模塊 de module .b { exports de。module .a.paket.y; 出口德 module .a.paket.z;}模塊 de module .c { requires de。模塊 .a 需要 de 模塊 .b}
該接口定義指示模塊向外部世界提供哪些包(使用關鍵字exports)以及外部需要哪些模塊(需要關鍵字)。注意:這不是前一句中的錯字; 一個模塊導出包,但需要模塊。這可能會令人困惑,因為軟件包和模塊通常具有相同或非常相似的名稱。未明確導出的模塊的所有軟件包只能在模塊中使用。如果您嘗試從模塊外部訪問它們,則會發生編譯器錯誤。
使用模塊化JAR作為模塊
現在我們已經看到了如何聲明一個模塊,讓我們回答另一個問題:我們在哪里編寫模塊聲明?該約定表示您在名為module-info.java的源代碼文件中聲明它,并將其放在模塊的文件層次結構的根目錄下。然后,編譯器將其轉換為文件module-info.class。名稱“module-info”包含連字符,因為它是一個無效的類名。這樣,現有的代碼就不會被損壞。然后將Java文件稱為模塊聲明和類文件模塊描述符。
如果您以這種方式聲明了一個模塊,則可以從中創建一個模塊化的JAR。它的結構就像一個常規的JAR文件,區別在于它的根目錄下有一個module-info.class文件。這樣的模塊化JAR可以用作模塊。由于向下兼容的原因,它也可以用作經典的JAR文件和類路徑。那么module-info.class就被忽略了。說到類路徑:通過引入模塊概念,它是由一個替代ModulePath進行。在模塊路徑中,您可以指定在文件系統中找到特定模塊的位置。
在過去,有一個類路徑,一堆JAR無序,可以不可控制地使用對方。此外,JAR內的所有內容都可以訪問。現在我們可以使用模塊機制來明確定義哪個模塊應該使用哪些模塊。這使得可以使用相同庫并行的多個版本。例如,模塊A可以使用版本1中的庫,版本2中的模塊B,最后,模塊C可以使用兩個模塊A和B.
使用Java 9的域驅動設計
通過模塊概念,可以更好地表達軟件架構。例如,層可以表示為模塊,并且它們的界面可以被清楚地定義。編譯器可以至少部分地檢測并防止架構違規。我們舉一個銀行應用程序的例子,設計用域驅動的設計(清單2和圖1)。
module de.wps.bankprogramm.domainLayer { exports de.wps.bankprogramm.domainLayer.valueObject; 出口 de.wps.bankprogramm.domainLayer.entity;}module de.wps.bankprogramm.infrastructurelayer { exports de.wps.bankprogramm.infrastructureLayer.database;}module de.wps.bankprogramm.applicationLayer { requires de.wps.bankprogramm.infrastructureLayer; 需要 de.wps.bankprogramm.domainLayer; 出口 de.wps.bankprogramm.applicationLayer.repositories;}module de.wps.bankprogramm.uiLayer { requires de.wps.bankprogramm.domainLayer; 需要 de.wps.bankprogramm.applicationLayer;}
系統的四層被實現為模塊。專用邏輯層(即模塊domainLayer)的模塊被聲明為與其他模塊沒有依賴關系。我們不想依賴技術代碼來污染我們的業務代碼。它包含一個用于我們系統的實體的包,一個用于它的值對象。的儲存庫,反過來,可以在基礎設施層(模塊infrastructureLayer)。因此,在這個設計中,它們被插入到應用層模塊(applicationLayer)中。根據上述聲明,可以訪問基礎設施和業務邏輯層。
用戶界面層(uiLayer模塊)可以訪問用戶邏輯和應用層。使用數據庫訪問代碼的包將導致編譯器錯誤,因為它在基礎設施包中,并且沒有在uiLayer的要求中指定。存儲庫到應用程序層的分配在架構上并不完全清晰,而是在這里完成,以避免使示例過于復雜。
將JDK切成塊
模塊機制對許多項目很有興趣,特別是JDK本身。這是項目名稱,拼圖來自的地方。并用這個拼圖Java應該分為模塊。到目前為止,整個JRE必須始終交付,即使只運行沒有GUI或不訪問數據庫的小程序。使用Java 9,JRE和JDK分解為模塊本身。這允許每個程序定義它需要什么,減少內存使用和提高性能。
Java標準模塊包括java.base,java.sql,java.desktop和java.xml。基本模塊java.base總是隱式包含 - 就像包java.lang不需要單獨導入一樣。模塊java.base將包含java.lang,java.math和java.io包。對于JDK本身的模塊,JAR文件不夠,因為它們也必須包含本機代碼。因此,這里介紹了所謂的JMOD文件。Java的首席架構師Mark Reinhold的直接引用:“JMOD文件是類固醇的JAR文件”。項目拼圖當然是Java 9帶來的巨大變化,也是其主要功能。但還有一些其他功能將使開發人員的生活更輕松。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%