淺談Java的SPI技術(shù)
人狠話不多,先上截圖和代碼吧。


這是工程目錄。看到resources目錄下面沒(méi)有,添加了META-INF和services目錄。
添加了一個(gè)com.gys.test.IAnimal文件。這個(gè)文件名和上面的接口名完全對(duì)應(yīng)。這個(gè)目錄的文件名是有講究的,按照SPI規(guī)范來(lái)的。
上代碼:
package com.gys.test;
public interface IAnimal {
void eat();
}
package com.gys.test.impl;
import com.gys.test.IAnimal;
public class Bird implements IAnimal {
@Override
public void eat() {
System.out.println("小鳥(niǎo)吃蟲(chóng)子");
}
}
package com.gys.test.impl;
import com.gys.test.IAnimal;
public class Dog implements IAnimal {
@Override
public void eat() {
//System.out.println("小狗吃屎");
System.out.println("小狗吃骨頭");
}
}
package com.gys.test;
import java.util.ServiceLoader;
public class MainTest {
public static void main(String[] args) {
ServiceLoader<IAnimal> animals=ServiceLoader.load(IAnimal.class);
for (IAnimal animal:animals){
animal.eat();
}
}
}

源碼一角說(shuō)明META-INF/service:

ServiceLoader.load(clsss)就是去ClassPath的MEAT-INF的service下去尋找指定文件;這里的classPath包括外部引入的jar包中的classPath.
如果我們引入了第三方的jar包,如果jar中的META-INF/service有com.gys.test.IAnimal文件,也會(huì)被讀取,并且實(shí)例化里面的類。
SPI使用場(chǎng)景:
自己提供接口讓別人提供實(shí)現(xiàn)的方式;典型的如JDBC模式。


以上就是淺談Java的SPI技術(shù)的詳細(xì)內(nèi)容,更多關(guān)于JAVA SPI技術(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Java和Dubbo的SPI機(jī)制原理解析
- Java 自旋鎖(spinlock)相關(guān)知識(shí)總結(jié)
- 深入理解Java中的SPI機(jī)制
- Java中SPI的一些理解
- 在java中使用SPI創(chuàng)建可擴(kuò)展的應(yīng)用程序操作
- java中spi使用詳解
- Java 添加、刪除、替換、格式化Word中的文本的步驟詳解(基于Spire.Cloud.SDK for Java)
- Java 添加、刪除、格式化Word中的圖片步驟詳解( 基于Spire.Cloud.SDK for Java )
- Java 基于Spire.Cloud.SDK for Java在PDF中繪制形狀
- 詳解java實(shí)踐SPI機(jī)制及淺析源碼
- Java SPI的簡(jiǎn)單小實(shí)例
- Java SPI機(jī)制原理及代碼實(shí)例
- 詳解JAVA SPI機(jī)制和使用方法
- Java基于Spire Cloud Excel把Excel轉(zhuǎn)換成PDF
- JAVA SPI特性及簡(jiǎn)單應(yīng)用代碼實(shí)例
- 深入學(xué)習(xí)Java中的SPI機(jī)制
- Java進(jìn)階之SPI機(jī)制詳解
相關(guān)文章
Java終止循環(huán)體的具體實(shí)現(xiàn)
這篇文章主要介紹了Java終止循環(huán)體的具體實(shí)現(xiàn),需要的朋友可以參考下2014-02-02
解決SpringBoot整合MybatisPlus分模塊管理遇到的bug
這篇文章主要介紹了解決SpringBoot整合MybatisPlus分模塊管理遇到的bug,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Struts1教程之ActionMapping_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Struts1教程之ActionMapping,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
深入理解Java設(shè)計(jì)模式之訪問(wèn)者模式
這篇文章主要介紹了JAVA設(shè)計(jì)模式之訪問(wèn)者模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解2021-11-11
Java8新特性之泛型的目標(biāo)類型推斷_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
泛型是Java SE 1.5的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說(shuō)所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。下面通過(guò)本文給分享Java8新特性之泛型的目標(biāo)類型推斷,感興趣的朋友參考下吧2017-06-06

