淺談Java的SPI技術(shù)
人狠話不多,先上截圖和代碼吧。
這是工程目錄。看到resources目錄下面沒有,添加了META-INF和services目錄。
添加了一個(gè)com.gys.test.IAnimal文件。這個(gè)文件名和上面的接口名完全對(duì)應(yīng)。這個(gè)目錄的文件名是有講究的,按照SPI規(guī)范來的。
上代碼:
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(); } }}
源碼一角說明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)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. XML入門的常見問題(三)2. HTTP協(xié)議常用的請(qǐng)求頭和響應(yīng)頭響應(yīng)詳解說明(學(xué)習(xí))3. ASP基礎(chǔ)入門第四篇(腳本變量、函數(shù)、過程和條件語句)4. HTML5實(shí)戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)5. .NET Framework各版本(.NET2.0 3.0 3.5 4.0)區(qū)別6. ASP將數(shù)字轉(zhuǎn)中文數(shù)字(大寫金額)的函數(shù)7. XML在語音合成中的應(yīng)用8. jscript與vbscript 操作XML元素屬性的代碼9. php使用正則驗(yàn)證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)10. 不要在HTML中濫用div
