亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Java基礎(chǔ)-模塊系統(tǒng)筆記(1)

learning / 3583人閱讀

摘要:模塊系統(tǒng)的前身是項(xiàng)目。最初,該項(xiàng)目?jī)H僅是為設(shè)計(jì)實(shí)現(xiàn)一個(gè)模塊系統(tǒng)。隨著項(xiàng)目的不斷深入,平臺(tái)對(duì)標(biāo)準(zhǔn)模塊系統(tǒng)的呼求也日益增長(zhǎng),批準(zhǔn)該項(xiàng)目升級(jí)為平臺(tái)的一部分,也能服務(wù)于和平臺(tái)的需求。自定義的配置,僅包含一組指定的模塊及其所需的模塊。

我的博客 轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處。

Java 9開(kāi)始,在Java的世界里多了一個(gè)叫模塊(JSR376)的特性。模塊系統(tǒng)的前身是Jigsaw項(xiàng)目。最初,該項(xiàng)目?jī)H僅是為JDK設(shè)計(jì)、實(shí)現(xiàn)一個(gè)模塊系統(tǒng)。后來(lái)項(xiàng)目組也希望它能為開(kāi)發(fā)者所用——雖然,一開(kāi)始它并不是Java SE平臺(tái)規(guī)范的組成部分。隨著項(xiàng)目的不斷深入,Java平臺(tái)對(duì)標(biāo)準(zhǔn)模塊系統(tǒng)的呼求也日益增長(zhǎng),JCP批準(zhǔn)該項(xiàng)目升級(jí)為JavaSE平臺(tái)的一部分,也能服務(wù)于Java MEJava EE平臺(tái)的需求。

官方對(duì)Java平臺(tái)模塊系統(tǒng)是這樣描述的: 一種新的Java編程組件,即模塊。它是自描述的代碼與數(shù)據(jù)的集合,有以下特性:

引入了一個(gè)新的可選階段——鏈接時(shí),它介于編譯時(shí)和運(yùn)行時(shí)之間,在此期間可以將一組模塊組裝并優(yōu)化為定制的運(yùn)行時(shí)鏡像。

為工具javac、jlink增加了一些選項(xiàng),以及在Java中,你可以指定模塊路徑,這些路徑定位模塊的定義。

引入模塊化JAR文件,該文件是一個(gè)JAR文件,其根目錄中包含module-info.class文件。

引入JMOD格式,它是一種類(lèi)似于JAR的打包格式,但它可以包含原生代碼和配置文件。

JDK本身已經(jīng)模塊化。有以下改變:

使你能夠?qū)?b>JDK的模塊組合成各種配置,包括:

JREJDK一樣的配置。

Java SE 8中定義的每個(gè)壓縮配置文件的內(nèi)容大致相同。

自定義的配置,僅包含一組指定的模塊及其所需的模塊。

重構(gòu)JDKJRE運(yùn)行時(shí)鏡像以適應(yīng)模塊并提高性能、安全性和可維護(hù)性。

定義了一個(gè)新的URI方案,用于命名存儲(chǔ)在運(yùn)行時(shí)映像中的模塊,類(lèi)和資源,而不會(huì)泄露映像的內(nèi)部結(jié)構(gòu)或格式。

刪除認(rèn)可的標(biāo)準(zhǔn)覆蓋機(jī)制和擴(kuò)展機(jī)制。

Java運(yùn)行時(shí)鏡像中刪除rt.jartools.jar

默認(rèn)情況下,大多數(shù)JDK的內(nèi)部API都不可訪問(wèn),但在所有或大部分功能都支持替換之前,可以訪問(wèn)一些關(guān)鍵的、廣泛使用的內(nèi)部API。

運(yùn)行jdeps -jdkinternals命令以確定你的的代碼是否使用了內(nèi)部JDK API。

兼容性

先來(lái)說(shuō)說(shuō)模塊系統(tǒng)的兼容性。Java一直是比較保守的,體現(xiàn)在更新上就是良好的兼容性。雖然看了官方對(duì)Java平臺(tái)模塊系統(tǒng)的描述好像改動(dòng)非常大,但是你的舊項(xiàng)目即使不模塊化也是能在新JDK上運(yùn)行的。后面會(huì)講到?jīng)]有模塊化的類(lèi)包是如何與模塊交互的。

為什么要模塊化

既然不模塊化也能好好的運(yùn)行,那么為什么要這么大費(fèi)周章的折騰代碼呢?

第一點(diǎn),Java 9前的Java程序,即使是一個(gè)簡(jiǎn)單的輸出Hello World的程序,也必須將整個(gè)JDK、JRE運(yùn)行時(shí)鏡像打包進(jìn)去才能運(yùn)行,這時(shí)Java引以為傲的數(shù)量繁多的類(lèi)庫(kù)反而成了累贅。比如開(kāi)源的優(yōu)秀編程庫(kù)——Guava里有很多很實(shí)用的工具類(lèi),有時(shí)我們可能只用到了其中一個(gè)類(lèi)而已,卻不得不將整個(gè)Guava類(lèi)庫(kù)打包進(jìn)我們的項(xiàng)目。

第二點(diǎn),沒(méi)法定義類(lèi)是否能被其他包里的類(lèi)引用到。比如我們編寫(xiě)了一個(gè)工具類(lèi),如果希望這個(gè)類(lèi)只能被某些包里的其他類(lèi)引用到,不暴露給其他包,Java 9前的Java程序是做不到這一點(diǎn)的。

如何模塊化

模塊化一個(gè)項(xiàng)目只要在項(xiàng)目的根目錄創(chuàng)建一個(gè)module-info.class文件就可以了。

如圖所示,我們創(chuàng)建了一個(gè)名為module的模塊并用關(guān)鍵字exports導(dǎo)出了test包。如果有其他模塊導(dǎo)入module模塊就可以引用到Main類(lèi)了,值得注意的是和test同級(jí)的包和test內(nèi)部的包因?yàn)闆](méi)有被導(dǎo)出,都是不能被引用到的。

而引用一個(gè)模塊則是用關(guān)鍵字requires

然后就可以使用test包內(nèi)的類(lèi)了:

import test.Main;

/**
 * @author Yuicon
 */
public class Test {

    public static void main(String[] args) {
        Main main = new Main();
        System.out.println(main);
    }

}

不過(guò)在導(dǎo)入前還需要在模塊依賴?yán)锾砑右獙?dǎo)入的模塊:

java.base模塊是默認(rèn)導(dǎo)入的,里面有我們常用的類(lèi)庫(kù):

模塊的強(qiáng)封裝性

我們知道模塊化后就能控制那些包可以被引用到了。不過(guò)不止如此,一個(gè)模塊的類(lèi)是不能訪問(wèn)到其他模塊里的類(lèi)的私有屬性的。聽(tīng)起來(lái)好像是理所當(dāng)然的,這是因?yàn)樵任覀兪强梢杂梅瓷鋪?lái)訪問(wèn)到私有屬性的。模塊化后就算反射也不能訪問(wèn)到了,算是加強(qiáng)了安全性。

不過(guò)這樣的話,那些依賴反射來(lái)獲取私有屬性的框架和庫(kù)就倒霉了。為了兼容這些框架和庫(kù),我們可以在模塊定義里加一個(gè)關(guān)鍵字open

module-info.class

open module module {
    exports test;
}

這樣我們就聲明了一個(gè)開(kāi)放的模塊,在模塊的所有軟件包上授予深入的反射訪問(wèn)權(quán)限(訪問(wèn)公共和私有API)。

模塊語(yǔ)句

在模塊聲明文件里一共有五種模塊語(yǔ)句,分別是:

導(dǎo)出語(yǔ)句(exports statement)

開(kāi)放語(yǔ)句(opens statement)

需要語(yǔ)句(requires statement)

使用語(yǔ)句(uses statement)

提供語(yǔ)句(provides statement)

package test.driver;

/**
 * @author Yuicon
 */
public interface Driver {

    int getCode();

}
package test;


import test.driver.Driver;


/**
 * @author Yuicon
 */
public class DriverImpl implements Driver {

    @Override
    public int getCode() {
        return 10086;
    }
}
module module {
    exports test.driver; // 導(dǎo)出包
    provides Driver
            with DriverImpl; // 為接口Driver提供實(shí)現(xiàn)
}

module queue {
    requires module; // 導(dǎo)入包
    opens test; // 開(kāi)放包的反射權(quán)限
    uses Driver; // 聲明使用接口
}
package main;

import test.driver.Driver;

import java.util.ServiceLoader;


/**
 * @author Yuicon
 */
public class Main {

    public static void main(String[] args) {
        // 獲取實(shí)現(xiàn)
        ServiceLoader serviceLoader = ServiceLoader.load(Driver.class);
        serviceLoader.findFirst().ifPresent(driver -> System.out.println(driver.getCode()));
    }

}

輸出:

10086

Process finished with exit code 0
聚合模塊

你可以創(chuàng)建一個(gè)不包含任何代碼的模塊,它收集并重新導(dǎo)出其他模塊的內(nèi)容,這樣的模塊稱為聚合模塊。假設(shè)有幾個(gè)模塊依賴于五個(gè)模塊,你可以為這五個(gè)模塊創(chuàng)建一個(gè)聚合模塊?,F(xiàn)在,你的模塊只能依賴于一個(gè)模塊——聚合模塊。

為了方便,Java 9包含幾個(gè)聚合模塊,如java.sejava.se.ee。java.se模塊收集Java SE的不與Java EE重疊的部分。java.se.ee模塊收集組成Java SE的所有模塊,包括與Java EE重疊的模塊。

待續(xù)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/71719.html

相關(guān)文章

  • Java應(yīng)用架構(gòu)設(shè)計(jì):模塊化模式與OSGi》讀書(shū)筆記

    摘要:本書(shū)概括以軟件系統(tǒng)為例,重點(diǎn)講解了應(yīng)用架構(gòu)中的物理設(shè)計(jì)問(wèn)題,即如何將軟件系統(tǒng)拆分為模塊化系統(tǒng)。容器獨(dú)立模塊不依賴于具體容器,采用輕量級(jí)容器,如獨(dú)立部署模塊可獨(dú)立部署可用性模式發(fā)布接口暴露外部配置使用獨(dú)立的配置文件用于不同的上下文。 本文為讀書(shū)筆記,對(duì)書(shū)中內(nèi)容進(jìn)行重點(diǎn)概括,并將書(shū)中的模塊化結(jié)合微服務(wù)、Java9 Jigsaw談?wù)劺斫狻?本書(shū)概括 以Java軟件系統(tǒng)為例,重點(diǎn)講解了應(yīng)用架構(gòu)...

    seanHai 評(píng)論0 收藏0
  • (CZ深入淺出Java基礎(chǔ))設(shè)計(jì)模式筆記

    摘要:在設(shè)計(jì)模式中,所有的設(shè)計(jì)模式都遵循這一原則。其實(shí)就是說(shuō)在應(yīng)用程序中,所有的類(lèi)如果使用或依賴于其他的類(lèi),則應(yīng)該依賴這些其他類(lèi)的抽象類(lèi),而不是這些其他類(lèi)的具體類(lèi)。使用設(shè)計(jì)模式是為了可重用代碼讓代碼更容易被他人理解保證代碼可靠性。 這是劉意老師的JAVA基礎(chǔ)教程的筆記講的賊好,附上傳送門(mén) 傳智風(fēng)清揚(yáng)-超全面的Java基礎(chǔ) 一、面向?qū)ο笏枷朐O(shè)計(jì)原則 1.單一職責(zé)原則 其實(shí)就是開(kāi)發(fā)人員經(jīng)常說(shuō)的高...

    李昌杰 評(píng)論0 收藏0
  • 《大型網(wǎng)站系統(tǒng)Java中間件》讀書(shū)筆記(上)

    摘要:另一個(gè)用戶請(qǐng)求過(guò)來(lái),負(fù)載均衡器指派這個(gè)請(qǐng)求到服務(wù)器。這樣就平攤了請(qǐng)求這種方式就叫做輪詢策略還有很多種,就看你想怎么實(shí)現(xiàn)了,反正這個(gè)邏輯的代碼放在負(fù)載均衡器上。 前言 只有光頭才能變強(qiáng)。文本已收錄至我的GitHub倉(cāng)庫(kù),歡迎Star:https://github.com/ZhongFuCheng3y/3y 這本書(shū)買(mǎi)了一段時(shí)間了,之前在杭州沒(méi)帶過(guò)去,現(xiàn)在讀完第三章,來(lái)做做筆記 showI...

    baukh789 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<