您的位置:首頁技術文章
文章詳情頁

淺談Java的SPI技術

瀏覽:7日期:2022-08-28 18:00:45

人狠話不多,先上截圖和代碼吧。

淺談Java的SPI技術

淺談Java的SPI技術

這是工程目錄。看到resources目錄下面沒有,添加了META-INF和services目錄。

添加了一個com.gys.test.IAnimal文件。這個文件名和上面的接口名完全對應。這個目錄的文件名是有講究的,按照SPI規范來的。

上代碼:

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(); } }}

淺談Java的SPI技術

源碼一角說明META-INF/service:

淺談Java的SPI技術

ServiceLoader.load(clsss)就是去ClassPath的MEAT-INF的service下去尋找指定文件;這里的classPath包括外部引入的jar包中的classPath.

如果我們引入了第三方的jar包,如果jar中的META-INF/service有com.gys.test.IAnimal文件,也會被讀取,并且實例化里面的類。

SPI使用場景:

自己提供接口讓別人提供實現的方式;典型的如JDBC模式。

淺談Java的SPI技術

淺談Java的SPI技術

以上就是淺談Java的SPI技術的詳細內容,更多關于JAVA SPI技術的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
国产综合久久一区二区三区