spi~在插件开发过程中的使用
spi是原生java的组件,通过META-INF/services目录进行注册,通过ServiceLoader进行加载,一般可以用在组件开发中,你在公用组件中封装好逻辑,将个性化的部分抽象出一个接口,接口通过spi的方式进行加载,在外部开发人员引用你的组件之后,通过实现接口来扩展个性化的功能,再通过META-INF/services对实现类进行注册。
组件端
先定义一个公开的接口
public interface SpiHello {
void printHello();
}
一个公开的组件
public static void print() {
InputStream resource = Tool.class.getClassLoader().getResourceAsStream("licence.txt");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int bufSize = 1024;
byte[] buffer = new byte[bufSize];
int len = 0;
while (true) {
try {
if (!(-1 != (len = resource.read(buffer, 0, bufSize))))
break;
}
catch (IOException e) {
throw new RuntimeException(e);
}
bos.write(buffer, 0, len);
}
ServiceLoader<SpiHello> spiHellos = ServiceLoader.load(SpiHello.class);
Iterator<SpiHello> iterable = spiHellos.iterator();
while (iterable.hasNext()) {
iterable.next().printHello();
}
System.out.println("value=" + bos.toString());
}
在开发人员使用时,需要注册他的实现类
com.lind.pk.Tool.print();
结果
注意,在组件内部读文件时,需要采用文件流的方式,否则,在调用地将出现无法加载的问题
合集:
springboot(2)
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2012-02-07 HashTable与Dictionary哪个性能更好?