新的Java 9功能介紹
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
第9版給Java定義模塊的可能性。一個(gè)模塊是一個(gè)命名的,自描述的程序組件,由一個(gè)或多個(gè)包(和數(shù)據(jù))組成。模塊可以定義如清單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}
該接口定義指示模塊向外部世界提供哪些包(使用關(guān)鍵字exports)以及外部需要哪些模塊(需要關(guān)鍵字)。注意:這不是前一句中的錯(cuò)字; 一個(gè)模塊導(dǎo)出包,但需要模塊。這可能會(huì)令人困惑,因?yàn)檐浖湍K通常具有相同或非常相似的名稱。未明確導(dǎo)出的模塊的所有軟件包只能在模塊中使用。如果您嘗試從模塊外部訪問它們,則會(huì)發(fā)生編譯器錯(cuò)誤。
使用模塊化JAR作為模塊
現(xiàn)在我們已經(jīng)看到了如何聲明一個(gè)模塊,讓我們回答另一個(gè)問題:我們?cè)谀睦锞帉懩K聲明?該約定表示您在名為module-info.java的源代碼文件中聲明它,并將其放在模塊的文件層次結(jié)構(gòu)的根目錄下。然后,編譯器將其轉(zhuǎn)換為文件module-info.class。名稱“module-info”包含連字符,因?yàn)樗且粋€(gè)無效的類名。這樣,現(xiàn)有的代碼就不會(huì)被損壞。然后將Java文件稱為模塊聲明和類文件模塊描述符。
如果您以這種方式聲明了一個(gè)模塊,則可以從中創(chuàng)建一個(gè)模塊化的JAR。它的結(jié)構(gòu)就像一個(gè)常規(guī)的JAR文件,區(qū)別在于它的根目錄下有一個(gè)module-info.class文件。這樣的模塊化JAR可以用作模塊。由于向下兼容的原因,它也可以用作經(jīng)典的JAR文件和類路徑。那么module-info.class就被忽略了。說到類路徑:通過引入模塊概念,它是由一個(gè)替代ModulePath進(jìn)行。在模塊路徑中,您可以指定在文件系統(tǒng)中找到特定模塊的位置。
在過去,有一個(gè)類路徑,一堆JAR無序,可以不可控制地使用對(duì)方。此外,JAR內(nèi)的所有內(nèi)容都可以訪問?,F(xiàn)在我們可以使用模塊機(jī)制來明確定義哪個(gè)模塊應(yīng)該使用哪些模塊。這使得可以使用相同庫并行的多個(gè)版本。例如,模塊A可以使用版本1中的庫,版本2中的模塊B,最后,模塊C可以使用兩個(gè)模塊A和B.
使用Java 9的域驅(qū)動(dòng)設(shè)計(jì)
通過模塊概念,可以更好地表達(dá)軟件架構(gòu)。例如,層可以表示為模塊,并且它們的界面可以被清楚地定義。編譯器可以至少部分地檢測(cè)并防止架構(gòu)違規(guī)。我們舉一個(gè)銀行應(yīng)用程序的例子,設(shè)計(jì)用域驅(qū)動(dòng)的設(shè)計(jì)(清單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;}
系統(tǒng)的四層被實(shí)現(xiàn)為模塊。專用邏輯層(即模塊domainLayer)的模塊被聲明為與其他模塊沒有依賴關(guān)系。我們不想依賴技術(shù)代碼來污染我們的業(yè)務(wù)代碼。它包含一個(gè)用于我們系統(tǒng)的實(shí)體的包,一個(gè)用于它的值對(duì)象。的儲(chǔ)存庫,反過來,可以在基礎(chǔ)設(shè)施層(模塊infrastructureLayer)。因此,在這個(gè)設(shè)計(jì)中,它們被插入到應(yīng)用層模塊(applicationLayer)中。根據(jù)上述聲明,可以訪問基礎(chǔ)設(shè)施和業(yè)務(wù)邏輯層。
用戶界面層(uiLayer模塊)可以訪問用戶邏輯和應(yīng)用層。使用數(shù)據(jù)庫訪問代碼的包將導(dǎo)致編譯器錯(cuò)誤,因?yàn)樗诨A(chǔ)設(shè)施包中,并且沒有在uiLayer的要求中指定。存儲(chǔ)庫到應(yīng)用程序?qū)拥姆峙湓诩軜?gòu)上并不完全清晰,而是在這里完成,以避免使示例過于復(fù)雜。
將JDK切成塊
模塊機(jī)制對(duì)許多項(xiàng)目很有興趣,特別是JDK本身。這是項(xiàng)目名稱,拼圖來自的地方。并用這個(gè)拼圖Java應(yīng)該分為模塊。到目前為止,整個(gè)JRE必須始終交付,即使只運(yùn)行沒有GUI或不訪問數(shù)據(jù)庫的小程序。使用Java 9,JRE和JDK分解為模塊本身。這允許每個(gè)程序定義它需要什么,減少內(nèi)存使用和提高性能。
Java標(biāo)準(zhǔn)模塊包括java.base,java.sql,java.desktop和java.xml。基本模塊java.base總是隱式包含 - 就像包java.lang不需要單獨(dú)導(dǎo)入一樣。模塊java.base將包含java.lang,java.math和java.io包。對(duì)于JDK本身的模塊,JAR文件不夠,因?yàn)樗鼈円脖仨毎緳C(jī)代碼。因此,這里介紹了所謂的JMOD文件。Java的首席架構(gòu)師Mark Reinhold的直接引用:“JMOD文件是類固醇的JAR文件”。項(xiàng)目拼圖當(dāng)然是Java 9帶來的巨大變化,也是其主要功能。但還有一些其他功能將使開發(fā)人員的生活更輕松。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%