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


這是工程目錄??吹絩esources目錄下面沒有,添加了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("小鳥吃蟲子");
}
}
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)文章
Mac OS上安裝Tomcat服務(wù)器的簡(jiǎn)單步驟
這篇文章主要介紹了Mac OS上安裝Tomcat服務(wù)器的簡(jiǎn)單步驟,包括簡(jiǎn)單的啟動(dòng)命令和查看Tomcat信息的方法,需要的朋友可以參考下2015-11-11
使用java反射將結(jié)果集封裝成為對(duì)象和對(duì)象集合操作
這篇文章主要介紹了使用java反射將結(jié)果集封裝成為對(duì)象和對(duì)象集合操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
一文帶你看懂Java8中的lambda表達(dá)式和方法引用
Lambda 表達(dá)式是 Java 8 引入的一項(xiàng)重要特性,它提供了一種簡(jiǎn)潔、清晰且靈活的語(yǔ)法來(lái)表示可傳遞的匿名函數(shù),下面就跟隨小編一起學(xué)習(xí)一下Java8中的lambda表達(dá)式和方法引用的相關(guān)知識(shí)吧2023-12-12
Java實(shí)現(xiàn)簡(jiǎn)單局域網(wǎng)聊天室
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單局域網(wǎng)聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
Spring操作JdbcTemplate數(shù)據(jù)庫(kù)的方法學(xué)習(xí)
這篇文章主要為大家介紹了Spring操作JdbcTemplate數(shù)據(jù)庫(kù)方法學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Java 遞歸查詢部門樹形結(jié)構(gòu)數(shù)據(jù)的實(shí)踐
本文主要介紹了Java 遞歸查詢部門樹形結(jié)構(gòu)數(shù)據(jù)的實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
IDEA使用JDK21控制臺(tái)亂碼問(wèn)題及解決
在使用IntelliJ IDEA開發(fā)時(shí),經(jīng)常會(huì)遇到因編碼不一致導(dǎo)致的中文亂碼問(wèn)題,特別是在JDK18以后的版本中,由于JDK內(nèi)部默認(rèn)編碼格式變?yōu)镚BK,而項(xiàng)目設(shè)置為UTF-8后,會(huì)導(dǎo)致亂碼問(wèn)題,本文介紹了幾個(gè)步驟來(lái)解決這一問(wèn)題2024-10-10

