SPI
薛定谔see猫 2022/3/24 java
新建一个模块
MySpi
用于存储spi
接口package com.meinil.spi; public interface MySpi { public void print(); }
新建模块
MySpiImpl
实现spi
接口package com.meinil.myspi; public class MySpiImpl implements MySpi { @Override public void print() { System.out.println("My spi 机制"); } }
resources
目录下新建META-INF/services/
目录,目录下新建com.meinil.spi.MySpi
文件,文件名为spi
接口的全类名,内容为实现类的全路径名com.meinil.myspi.MySpiImpl
新建模块
YouSpiImpl
实现spi
接口package com.meinil.youspi; public class YouSpiImpl implements MySpi { @Override public void print() { System.out.println("You spi 机制"); } }
resources
目录下新建META-INF/services/
目录,目录下新建com.meinil.spi.MySpi
文件,文件名为spi
接口的全类名,内容为实现类的全路径名com.meinil.youspi.YouSpiImpl
新建测试模块
TestDemo
,导入上述的三个模块public class MainApplication { public static void main(String[] args) { ServiceLoader<MySpi> load = ServiceLoader.load(MySpi.class); Iterator<MySpi> iterator = load.iterator(); while (iterator.hasNext()) { MySpi next = iterator.next(); next.print(); } } }
输出结果
My spi 机制 You spi 机制