欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中spi使用詳解

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

一、簡介

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

1.什么是SPI

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

2.SPI和API的使用場景

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

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

二、開發(fā)步驟

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

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

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

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

文件內容類似:

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

在啟動類中加載服務,代碼類似:

//加載方式一
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 定義接口和實現類

接口:

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

實現類一:

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

實現類二:

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,內容如下:

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

3.3 啟動類中加載服務

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

總結

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

相關文章

  • Springboot整合Flowable6.x導出bpmn20的步驟詳解

    Springboot整合Flowable6.x導出bpmn20的步驟詳解

    這篇文章主要介紹了Springboot整合Flowable6.x導出bpmn20,Flowable流程引擎可用于部署B(yǎng)PMN 2.0流程定義,可以十分靈活地加入你的應用/服務/構架,本文給出兩種從flowable導出流程定義bpmn20.xml的方式,需要的朋友可以參考下
    2023-04-04
  • Spring Boot 打包與熱部署的操作方法

    Spring Boot 打包與熱部署的操作方法

    這篇文章主要介紹了Spring Boot 打包與熱部署的操作方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • SpringBoot2整合ElasticJob框架過程詳解

    SpringBoot2整合ElasticJob框架過程詳解

    這篇文章主要介紹了SpringBoot2整合ElasticJob框架過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java文件基本操作總結

    Java文件基本操作總結

    今天給大家?guī)淼氖顷P于Java基礎的相關知識,文章圍繞著Java文件操作展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 學習Java中Class類及其用法

    學習Java中Class類及其用法

    這篇文章分為三大部分,主要內容有Class類原理詳解、用法及泛化,需要的朋友可以參考下
    2015-07-07
  • java字節(jié)字符轉換流操作詳解

    java字節(jié)字符轉換流操作詳解

    這篇文章主要介紹了java字節(jié)字符轉換流操作,結合實例形式詳細分析了Java字符流轉換相關原理、實現方法及操作注意事項,需要的朋友可以參考下
    2019-09-09
  • Java中內部類使用方法實戰(zhàn)案例分析

    Java中內部類使用方法實戰(zhàn)案例分析

    這篇文章主要介紹了Java中內部類使用方法,結合具體案例形式分析了Java內部類原理、調用方法及相關使用注意事項,需要的朋友可以參考下
    2019-09-09
  • java學習筆記_關于字符串概述

    java學習筆記_關于字符串概述

    下面小編就為大家?guī)硪黄猨ava學習筆記_關于字符串概述。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot中使用@scheduled定時執(zhí)行任務的坑

    SpringBoot中使用@scheduled定時執(zhí)行任務的坑

    本文主要介紹了SpringBoot中使用@scheduled定時執(zhí)行任務的坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • java8中@Contended注解的使用

    java8中@Contended注解的使用

    本文主要介紹了java8中@Contended注解的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07

最新評論