成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

【源起Netty 外傳】ServiceLoader詳解

MoAir / 647人閱讀

摘要:答曰摸索直譯為服務(wù)加載器,最終目的是獲取的實(shí)現(xiàn)類(lèi)。代碼走起首先,要有一個(gè)接口形狀接口介紹然后,要有該接口的實(shí)現(xiàn)類(lèi)。期具體實(shí)現(xiàn)依靠的內(nèi)部類(lèi),感性趣的朋友可以自己看一下。總結(jié)重點(diǎn)在于可跨越包獲取,這一點(diǎn)筆者通過(guò)多模塊項(xiàng)目親測(cè)延時(shí)加載特性

前戲

netty源碼注釋有云:

...

If a provider class has been installed in a jar file that is
visible to the system class loader, and that jar file contains a
provider-configuration file named
java.nio.channels.spi.SelectorProvider in the resource
directory META-INF/services, then the first class name
specified in that file is taken.  The class is loaded and
instantiated; if this process fails then an unspecified error is
thrown.

...

不知所云?好吧,重點(diǎn)是,jar文件中在META-INF/services目錄下配置了A屬性,以某種方式能加載到。

how can do that? 答曰:ServiceLoader

摸索

ServiceLoader直譯為服務(wù)加載器,最終目的是獲取service的impl實(shí)現(xiàn)類(lèi)。正如前文所說(shuō),它將加載META-INF/services下的配置文件,來(lái)鎖定impl實(shí)現(xiàn)類(lèi)。

代碼走起

1.首先,要有一個(gè)接口

//形狀接口
public interface Shape {
    String introduce(); //介紹
}

2.然后,要有該接口的實(shí)現(xiàn)類(lèi)。實(shí)現(xiàn)類(lèi)很簡(jiǎn)單,介紹自己的形狀是啥

//實(shí)現(xiàn)類(lèi)一
public class Circle implements Shape {
    public String introduce() {
        return "圓形";  //言簡(jiǎn)意賅的介紹
    }
}
//實(shí)現(xiàn)類(lèi)二
public class Sequare implements Shape {
    static{
        System.out.println("【Sequare】據(jù)說(shuō)有延時(shí)加載,try it..");
    }
    public String introduce() {
        return "方形";
    }
}

眼尖的朋友可能已經(jīng)注意到了,這里有個(gè)靜態(tài)塊,因?yàn)橘Y料中有提到ServiceLoader有延時(shí)加載的效果。寡人不信,遂驗(yàn)之……

3.配置文件,放在META-INF/services

文件位置:

- src
    -main
        -resources
            - META-INF
                - services
                    - xxxpackage.Shape

文件名:包名.接口名

文件內(nèi)容:包名.接口實(shí)現(xiàn)類(lèi),換行符分隔

xxxpackage.Circle
xxxpackage.Sequare

4.ServiceLoader調(diào)用

ServiceLoader shapeLoader = ServiceLoader.load(Shape.class);
Iterator it = shapeLoader.iterator();
while(it.hasNext()){
    System.out.println("Iterator next()方法調(diào)用..");
    Shape shape = it.next();
    System.out.printf("what"s shape?%s
",shape.introduce());
}

調(diào)用結(jié)果:

Iterator next()方法調(diào)用..
【Sequare】據(jù)說(shuō)有延時(shí)加載,try it..
what"s shape?方形

從該結(jié)果可看出,在調(diào)用it.next()的時(shí)候,才真正的加載了Sequare類(lèi),確確實(shí)實(shí)是延時(shí)加載。期具體實(shí)現(xiàn)依靠ServiceLoader的內(nèi)部類(lèi)LazyIterator,感性趣的朋友可以自己看一下。

總結(jié)

ServiceLoader重點(diǎn)在于可跨越j(luò)ar包獲取impl,這一點(diǎn)筆者通過(guò)maven多模塊項(xiàng)目親測(cè)ok

延時(shí)加載特性

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/68287.html

相關(guān)文章

  • 源起Netty 外傳】System.getPropert()詳解

    摘要:閱讀源碼時(shí),發(fā)現(xiàn)很多,理所當(dāng)然會(huì)想翻閱資料后,該技能,姿勢(shì)如下環(huán)境中的全部屬性全部屬性注意如果將本行代碼放在自定義屬性之后,會(huì)不會(huì)打出把自定義屬性也給獲取到可以結(jié)論會(huì)獲取目前環(huán)境中全部的屬性值,無(wú)論系統(tǒng)提供還是個(gè)人定義系統(tǒng)提供屬性代碼中定義 閱讀源碼時(shí),發(fā)現(xiàn)很多System.getProperty(xxx),理所當(dāng)然會(huì)想:whats fucking this? 翻閱資料后,Get該技能...

    lixiang 評(píng)論0 收藏0
  • 源起Netty 外傳】FastThreadLocal怎么Fast?

    摘要:實(shí)現(xiàn)原理淺談幫助理解的示意圖中有一屬性,類(lèi)型是的靜態(tài)內(nèi)部類(lèi)。剛剛說(shuō)過(guò),是一個(gè)中的靜態(tài)內(nèi)部類(lèi),則是的內(nèi)部節(jié)點(diǎn)。這個(gè)會(huì)在線(xiàn)程中,作為其屬性初始是一個(gè)數(shù)組的索引,達(dá)成與類(lèi)似的效果。的方法被調(diào)用時(shí),會(huì)根據(jù)記錄的槽位信息進(jìn)行大掃除。 概述 FastThreadLocal的類(lèi)名本身就充滿(mǎn)了對(duì)ThreadLocal的挑釁,快男FastThreadLocal是怎么快的?源碼中類(lèi)注釋坦白如下: /** ...

    gxyz 評(píng)論0 收藏0
  • 源起Netty 外傳】ScheduledThreadPoolExecutor源碼解讀

    引言 本文是源起netty專(zhuān)欄的第4篇文章,很明顯前3篇文章已經(jīng)在偏離主題的道路上越來(lái)越遠(yuǎn)。于是乎,我決定:繼續(xù)保持…… 使用 首先看看源碼類(lèi)注釋中的示例(未改變官方示例邏輯,只是增加了print輸出和注釋?zhuān)?import java.time.LocalTime; import java.util.concurrent.Executors; import java.util.concurrent....

    funnyZhang 評(píng)論0 收藏0
  • 源起Netty 外傳】ScheduledThreadPoolExecutor源碼解讀

    引言 本文是源起netty專(zhuān)欄的第4篇文章,很明顯前3篇文章已經(jīng)在偏離主題的道路上越來(lái)越遠(yuǎn)。于是乎,我決定:繼續(xù)保持…… 使用 首先看看源碼類(lèi)注釋中的示例(未改變官方示例邏輯,只是增加了print輸出和注釋?zhuān)?import java.time.LocalTime; import java.util.concurrent.Executors; import java.util.concurrent....

    Eastboat 評(píng)論0 收藏0
  • 源起Netty 外傳】ScheduledThreadPoolExecutor源碼解讀

    引言 本文是源起netty專(zhuān)欄的第4篇文章,很明顯前3篇文章已經(jīng)在偏離主題的道路上越來(lái)越遠(yuǎn)。于是乎,我決定:繼續(xù)保持…… 使用 首先看看源碼類(lèi)注釋中的示例(未改變官方示例邏輯,只是增加了print輸出和注釋?zhuān)?import java.time.LocalTime; import java.util.concurrent.Executors; import java.util.concurrent....

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

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

0條評(píng)論

閱讀需要支付1元查看
<