最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中spi使用詳解

 更新時間:2020年09月03日 08:54:47   作者:panda-star  
java中spi(service provider interface)是jdk內(nèi)置的一種服務(wù)發(fā)現(xiàn)機制,可以基于配置,在運行時加載指定服務(wù)。這篇文章主要介紹了java中spi使用,需要的朋友可以參考下

一、簡介

java中spi(service provider interface)是jdk內(nèi)置的一種服務(wù)發(fā)現(xiàn)機制,可以基于配置,在運行時加載指定服務(wù)。java中提供了很多服務(wù)提供接口,如jdbc、jndi等。

1.什么是SPI

     SPI全稱Service Provider Interface,是Java提供的一套用來被第三方實現(xiàn)或者擴展的接口,它可以用來啟用框架擴展和替換組件。 SPI的作用就是為這些被擴展的API尋找服務(wù)實現(xiàn)。

2.SPI和API的使用場景

    API (Application Programming Interface)在大多數(shù)情況下,都是實現(xiàn)方制定接口并完成對接口的實現(xiàn),調(diào)用方僅僅依賴接口調(diào)用,且無權(quán)選擇不同實現(xiàn)。 從使用人員上來說,API 直接被應(yīng)用開發(fā)人員使用。

    SPI (Service Provider Interface)是調(diào)用方來制定接口規(guī)范,提供給外部來實現(xiàn),調(diào)用方在調(diào)用時則選擇自己需要的外部實現(xiàn)。  從使用人員上來說,SPI 被框架擴展人員使用。

二、開發(fā)步驟

spi開發(fā)中,涉及接口、實現(xiàn)類、配置文件和服務(wù)加載,具體開發(fā)步驟如下:

定義接口和實現(xiàn)類(可多個);

在項目resources目錄下創(chuàng)建META-INF/services文件夾,接著在services文件夾下創(chuàng)建以接口完整類路徑名(包含包路徑和接口名)為文件名的文件,文件內(nèi)容為需要加載的服務(wù)(實現(xiàn)類)的完整類路徑名,一行一個;
目錄結(jié)構(gòu)類似:

resources--
|-services--
|-com.dragon.study.spring_boot_main.spi.Hello

文件內(nèi)容類似:

com.dragon.study.spring_boot_main.spi.HelloOne
com.dragon.study.spring_boot_main.spi.HelloTwo

在啟動類中加載服務(wù),代碼類似:

//加載方式一
Iterator<Hello> it = Service.providers(Hello.class);
while(it.hasNext()){
	it.next().hello();
}

//加載方式二
ServiceLoader<Hello> hellos = ServiceLoader.load(Hello.class);
for (Hello h : hellos){
	h.hello();
}

三、使用示例

3.1 定義接口和實現(xiàn)類

接口:

package com.dragon.study.spring_boot_main.spi;
public interface Hello {
  void hello();
}

實現(xiàn)類一:

package com.dragon.study.spring_boot_main.spi;
public class HelloOne implements Hello {
  @Override
  public void hello() {
    System.out.println("hello one");
  }
}

實現(xiàn)類二:

package com.dragon.study.spring_boot_main.spi;
public class HelloTwo implements Hello {
  @Override
  public void hello() {
    System.out.println("hello two");
  }
}

3.2 定義配置文件

在resources/META-INF/services目錄下創(chuàng)建配置文件com.dragon.study.spring_boot_main.spi.Hello,內(nèi)容如下:

com.dragon.study.spring_boot_main.spi.HelloOne
com.dragon.study.spring_boot_main.spi.HelloTwo

3.3 啟動類中加載服務(wù)

package com.dragon.study.spring_boot_main.spi;

import sun.misc.Service;

import java.util.Iterator;
import java.util.ServiceLoader;

public class SpiMain {
  public static void main(String[] args) {
    //加載方式一
//    Iterator<Hello> it = Service.providers(Hello.class);
//    while(it.hasNext()){
//      it.next().hello();
//    }

    //加載方式二
    ServiceLoader<Hello> hellos = ServiceLoader.load(Hello.class);
    for (Hello h : hellos){
      h.hello();
    }
  }
}

啟動后輸出:

hello one
hello two

總結(jié)

到此這篇關(guān)于java中spi使用的文章就介紹到這了,更多相關(guān)java中spi使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Maven配置文件settings.xml的實現(xiàn)

    Maven配置文件settings.xml的實現(xiàn)

    Maven是一個用于構(gòu)建和管理Java項目的強大工具,它依賴于設(shè)置文件來配置和管理其行為,其中最重要的之一便是settings.xml文件,本文主要介紹了Maven配置文件settings.xml的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • SpringBoot創(chuàng)建自定義starter詳解

    SpringBoot創(chuàng)建自定義starter詳解

    這篇文章主要介紹了SpringBoot創(chuàng)建自定義starter詳解,Starter是Spring Boot中的一個非常重要的概念,Starter相當于模塊,它能將模塊所需的依賴整合起來并對模塊內(nèi)的Bean根據(jù)環(huán)境(條件)進行自動配置,需要的朋友可以參考下
    2024-01-01
  • Kafka Java Producer代碼實例詳解

    Kafka Java Producer代碼實例詳解

    這篇文章主要介紹了Kafka Java Producer代碼實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • SSH框架網(wǎng)上商城項目第15戰(zhàn)之線程、定時器同步首頁數(shù)據(jù)

    SSH框架網(wǎng)上商城項目第15戰(zhàn)之線程、定時器同步首頁數(shù)據(jù)

    這篇文章主要為大家詳細介紹了SSH框架網(wǎng)上商城項目第15戰(zhàn)之線程、定時器同步首頁數(shù)據(jù),感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java?String源碼contains題解重復(fù)疊加字符串匹配

    Java?String源碼contains題解重復(fù)疊加字符串匹配

    這篇文章主要為大家介紹了Java?String源碼contains題解重復(fù)疊加字符串匹配示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 解決Springboot中Feignclient調(diào)用時版本問題

    解決Springboot中Feignclient調(diào)用時版本問題

    這篇文章主要介紹了解決Springboot中Feign?client調(diào)用時版本問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 淺談Mybatis Plus的BaseMapper的方法是如何注入的

    淺談Mybatis Plus的BaseMapper的方法是如何注入的

    我們在用的時候經(jīng)常就是生產(chǎn)自定義的Mapper繼承自BaseMapper,那么BaseMapper怎么被注入到mybatis里的,本文就詳細的介紹一下,感興趣的可以了解一下
    2021-09-09
  • Spring?JPA?deleteInBatch導致StackOverflow問題

    Spring?JPA?deleteInBatch導致StackOverflow問題

    這篇文章主要介紹了Spring?JPA?deleteInBatch導致StackOverflow問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring Boot集成Spring Cloud Eureka進行服務(wù)治理的方法

    Spring Boot集成Spring Cloud Eureka進行服務(wù)治理的方法

    本文通過詳細的步驟和代碼示例,介紹了如何在Spring Boot中集成Spring Cloud Eureka進行服務(wù)治理,通過這種方式,可以有效地管理和維護微服務(wù)架構(gòu)中的服務(wù),感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • SpringMVC中@ModelAttribute與@RequestBody的區(qū)別及說明

    SpringMVC中@ModelAttribute與@RequestBody的區(qū)別及說明

    這篇文章主要介紹了SpringMVC中@ModelAttribute與@RequestBody的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

呼玛县| 汶上县| 和田县| 纳雍县| 新晃| 托里县| 溆浦县| 长岛县| 自治县| 五峰| 宝坻区| 左权县| 贵溪市| 白玉县| 博罗县| 武功县| 壶关县| 平果县| 南开区| 麻阳| 晋江市| 永登县| 贺州市| 彭州市| 遂溪县| 蕉岭县| 小金县| 江门市| 沾益县| 天气| 巧家县| 溧阳市| 九寨沟县| 文昌市| 山阴县| 深水埗区| 开封市| 正安县| 高陵县| 武陟县| 房产|