返回信息流附件(3.4KB) src.zip
我已经将源码打包了,以下是文字版的代码块。
接口:也就是SPI中的service
```JAVA
public interface HelloInterface {
void sayHello();
}
```
实现接口的两个Java类:
```JAVA
public class TextHello implements HelloInterface {
@Override
public void sayHello() {
System.out.println("TextHello.");
}
}
```
以及
```JAVA
public class ImageHello implements HelloInterface {
@Override
public void sayHello() {
System.out.println("imgHello.");
}
}
```
测试代码:
```JAVA
public class MyTest26 {
public static void main(String[] args) {
ServiceLoader<HelloInterface> loaders = ServiceLoader.load(HelloInterface.class);
for (HelloInterface in : loaders){
in.sayHello();
}
}
}
```
但是为何控制台没有输出任何东西?百思不得其解。还有案例代码来源于:
https://www.jianshu.com/p/46aa69643c97
还有META-INF/services文件夹中的配置文件如下图所示:
这是一条镜像帖。来源:北邮人论坛 / java / #62980同步于 2019/11/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【已解决】Java 关于SPI实现未果的问题
xiaoxiaohai
2019/11/10镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 nanguohao 的大作中提到: 】
: 那你debug一下,看loders是不是空的
按照你的意思,我简单地改为:
```java
public static void main(String[] args) {
ServiceLoader<HelloInterface> loaders = ServiceLoader.load(HelloInterface.class);
System.out.println(loaders.iterator().hasNext());
for (HelloInterface in : loaders){
in.sayHello();
System.out.println(1);
}
}
```
控制台输出:flase
迭代器里根本没有元素,这意味着ServiceLoader没有加载成功provider吗?我的配置文件应该没有写错吧。
看下services的配置文件一块打包到了编译后的输出目录了没(一般是target目录或者out目录),如果输出了,检查下文件内容对不对。
最后,不知道你用spi是像完成什么功能,当初我有短时间要做这个功能,开始考虑用的spi,后面换成了用org.reflections;reflections,可以看下符不符合你的需求
【 在 cc19931002 的大作中提到: 】
: 看下services的配置文件一块打包到了编译后的输出目录了没(一般是target目录或者out目录),如果输出了,检查下文件内容对不对。
: 最后,不知道你用spi是像完成什么功能,当初我有短时间要做这个功能,开始考虑用的spi,后面换成了用org.reflections;reflections,可以看下符不符合你的需求
我的目的是:验证使用SPI机制,可以用ServiceLoader类来联系Service(接口)和Provider(子类)之间被实现和实现的关系。源代码已经打包为一个src.zip了,希望你能替我看看(包括配置文件)。配置文件是否被打包到编译后的输出目录这一点我真的不知道如何来看,这方面学得不好。
你用的什么编译器,idea还是eclipse
【 在 xiaoxiaohai 的大作中提到: 】
:
: 我的目的是:验证使用SPI机制,可以用ServiceLoader类来联系Service(接口)和Provider(子类)之间被实现和实现的关系。源代码已经打包为一个src.zip了,希望你能替我看看(包括配置文件)。配置文件是否被打包到编译后的输出目录这一点我真的不知道如何来看,这方面学得不好。
你就用idea运行的花,,左侧工程目录下面会有个橙色的target或者out目录
【 在 xiaoxiaohai 的大作中提到: 】
: IDEA