成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java的SPI機制介紹

開發 后端
SPI的全名為Service Provider Interface.普通開發人員可能不熟悉,因為這個是針對廠商或者插件的。在java.util.ServiceLoader的文檔里有比較詳細的介紹。

SPI的全名為Service Provider Interface.普通開發人員可能不熟悉,因為這個是針對廠商或者插件的。在java.util.ServiceLoader的文檔里有比較詳細的介紹。究其思想,其實是和"Callback"差不多。“Callback”的思想是在我們調用API的時候,我們可以自己寫一段邏輯代碼,傳入到API里面,API內部在合適的時候會調用它,從而實現某種程度的“定制”。

典型的是Collections.sort(List<T> list,Comparator<? super T> c)這個方法,它的第二個參數是一個實現Comparator接口的實例。我們可以根據自己的排序規則寫一個類,實現此接口,傳入此方法,那么這個方法就會根據我們的規則對list進行排序。

把這個思想擴展開來,我們用SPI來重新實現上面的例子。客戶把自己的排序規則寫成一個類,并且打包成Jar文件,這個Jar文件里面必須有META-INF目錄,其下又有services目錄,其下有一個文本文件,文件名即為接口的全名:java.util.Comparator。

--META-INF
--services
--java.util.Comparator

文件內容只有一行:

  1. com.company1.ComparatorProvider 

這一行是你實現了Comparator接口的類的全名,它的代碼如下:

  1. package com.company1; 
  2. import java.util.Comparator; 
  3. import com.mycompany.myapp.MyItem; 
  4. public class ComparatorProvider implements Comparator<MyItem>{ 
  5.  
  6. @Override 
  7. public int compare(MyItem o1, MyItem o2) { 
  8. //依據name排序 
  9. return o1.getName().compareTo(o2.getName()); 

編譯打包后,把它放到你的主程序的class path里。下面是你的主程序:

  1. //從class path中所有Jar的META-INF目錄中搜索,找到合適的類并加載。 
  2. private static ServiceLoader<Comparator> serviceLoader 
  3. = ServiceLoader.load(Comparator.class); 
  4. public static void main(String[] args) 
  5. List<MyItem> myList = new ArrayList<MyItem>(); 
  6. myList.add(new MyItem(2,"c","hhh")); 
  7. myList.add(new MyItem(3,"k","ooo")); 
  8. myList.add(new MyItem(4,"d","ppp")); 
  9. myList.add(new MyItem(5,"b","ggg")); 
  10. showList(myList); 
  11. Collections.sort(myList,getCompartor()); 
  12. showList(myList); 
  13. @SuppressWarnings("unchecked"
  14. private static Comparator<MyItem> getCompartor() { 
  15. for(Comparator service : serviceLoader) 
  16. return (Comparator<MyItem>)service; 
  17. return null

要注意的是serviceLoader開始只是加載類,實例化要到***次用的時候。類MyItem和方法showList并不重要,所以你不必在意。你可以按照這個規則,寫另外一個排序規則的Jar,隨時可以更換你的排序規則。

原文鏈接:http://mars914.iteye.com/blog/1283859

【編輯推薦】

  1. 分布式緩存Memcached的Java客戶端優化歷程
  2. Java虛擬機及JVM體系結構
  3. Java技能的優化集錦
  4. Java中Error與Exception的區別
  5. 淺談Java的輸入輸出流
責任編輯:林師授 來源: mars914的博客
相關推薦

2024-10-29 08:34:55

SPI機制接口

2020-06-30 15:35:36

JavaSPI代碼

2025-03-04 09:02:25

JavaSPI機制

2022-05-06 08:26:32

JavaSPI機制

2023-12-11 07:21:12

SPI機制插件

2025-03-27 02:00:00

SPIJava接口

2021-09-10 08:31:19

DubboSPI框架

2025-05-08 03:25:00

DubboSPI機制

2020-11-20 07:51:02

JavaSPI機制

2025-05-20 05:53:07

DubboSPI機制

2022-08-17 08:17:01

SPI機制接口

2020-12-14 11:35:22

SPI Java機制

2021-05-30 07:54:24

SPI機制場景

2011-06-28 12:39:34

Java垃圾回收

2011-07-21 15:20:41

java異常處理機制

2024-01-15 08:25:53

SPI機制JavaDubbo

2010-06-18 13:58:10

BGP協議

2010-05-07 15:55:27

Unix系統

2009-11-09 17:55:13

WCF緩存

2016-03-09 09:54:47

Python開發緩存機制
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久 | 日本精品裸体写真集在线观看 | 国产一区二区成人 | www.日本三级 | 日本午夜免费福利视频 | 国产成人91视频 | 亚洲国产成人精品女人久久久野战 | 久久精品国产一区 | 欧美日韩国产一区 | 中文二区| 欧美精品综合 | 久久九九色 | 久久综合888 | 亚洲国产第一页 | 国产真实乱对白精彩久久小说 | 日韩国产一区二区三区 | 欧美日韩三级在线观看 | 成人婷婷 | 亚洲日本一区二区三区四区 | 亚洲精品一区二区三区四区高清 | 国产精品欧美一区二区三区不卡 | 中文字幕视频在线 | 人妖videosex高潮另类 | 久久中文字幕一区 | 国产区精品 | 久久激情网 | 久久99精品国产麻豆婷婷 | av中文字幕在线播放 | 91中文字幕在线 | 日韩第一区 | 成人国产精品久久 | 国产精品久久久久久影视 | 成人免费视频播放 | 国产主播第一页 | 国产精品一区二区三区久久 | 国产欧美精品一区二区色综合朱莉 | 国产欧美一区二区三区久久手机版 | 91久久久久久久久久久 | 欧美高清性xxxxhd | 人人看人人爽 | 国产一区二区三区在线免费 |