淺談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使用場景:
自己提供接口讓別人提供實(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. ASP動(dòng)態(tài)網(wǎng)頁制作技術(shù)經(jīng)驗(yàn)分享2. 詳解瀏覽器的緩存機(jī)制3. vue3+ts+elementPLus實(shí)現(xiàn)v-preview指令4. jsp文件下載功能實(shí)現(xiàn)代碼5. 如何在jsp界面中插入圖片6. Xml簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理7. .Net Core和RabbitMQ限制循環(huán)消費(fèi)的方法8. phpstudy apache開啟ssi使用詳解9. jsp實(shí)現(xiàn)登錄驗(yàn)證的過濾器10. JSP之表單提交get和post的區(qū)別詳解及實(shí)例
