<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    SPI淺析

    共 1979字,需瀏覽 4分鐘

     ·

    2021-10-12 15:12

    SPI全稱Service provider interface,是一種服務發(fā)現(xiàn)機制。其通過resource/META-INF/services文件來查找具體的實現(xiàn)類,并加載到jvm中,因此可以對現(xiàn)有代碼進行靈活的擴展。再此我們先做個小的demo吧。
    一般來說我們知道做任何事情都要有個主線,你不能說上了一天班然后該干啥不知道,傻傻呼呼坐了一天,最后整個人都快要廢了的感覺。這樣的事情在編程這樣嚴密的事情上來說也是站不住腳的,在編程代碼編程中大的導向性我們是我們邏輯,在戰(zhàn)術層面比較重要的就是接口、父類、虛類這些了。所以說SPI所說的靈活的擴展,不外乎接口、父類以及虛類的情況。So demo來了。
    定義接口
    package?com.example.demo.spi;/** * @Author tianjl * @Date 2021/10/11 10:11 * @Discription disc */public interface MySpi {

    void show();}
    實現(xiàn)類1
    package com.example.demo.spi.imp;
    import com.example.demo.spi.MySpi;

    /** * @Author tianjl * @Date 2021/10/11 10:12 * @Discription disc */public class MySpi1 implements MySpi { @Override public void show() { System.out.println("this is myspi one~~~~"); }}
    實現(xiàn)類2
    package com.example.demo.spi.imp;
    import com.example.demo.spi.MySpi;

    /** * @Author tianjl * @Date 2021/10/11 10:12 * @Discription disc */public class MySpi2 implements MySpi { @Override public void show() { System.out.println("this is myspi two~~~~"); }}
    在main/resources/services目錄下創(chuàng)建spi接口類路勁的文件,并將具體的實現(xiàn)類的路徑放入其中,如圖所示:
    在創(chuàng)建好這些類和文件之后,我們需要將我們的spi實現(xiàn)類用起來,所以這塊我們要編寫主要的調用類。
    public class TestSpi {

    public static void main(String[] args) { Iterator providers= Service.providers(MySpi.class); ServiceLoader loader=ServiceLoader.load(MySpi.class); while (providers.hasNext()){ MySpi service=providers.next(); service.show(); } System.out.println("------");

    Iterator iterator=loader.iterator(); while (iterator.hasNext()){ MySpi service=iterator.next(); service.show(); } }}
    運行的結果如下:

    如上圖所示,spi的demo是跑起來了,我們可以想一下其實這個spi我們完全可以自己搞一套,因為我們讀取的接口文件是固定的META-INF/services目錄,因為接口路徑存在,接口實現(xiàn)類的路徑也存在,所以采用jdk的反射輕松就可以進行實例化。
    在jdbc中鏈接的初始化就采用了spi機制。
    說到這里,我們就了解了spi到底是個啥了,我們也可以通過java類中的靜態(tài)代碼進行潛移默化的一些事。對于我們要擴展或者摘除的一些類來說,修改services下對應接口文件的內容,并進行重新reload接口文件即可。

    午安~



    瀏覽 36
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    国产福利视屏 | 可以赌博看毛片的网站 | 亚洲啪AV永久无码精品放毛片 | 国产成人无码精品久久久久 | 免费看的黄色电影一级片 |