1、新建 maven 父工程 java-spi-demo
2、新建子接口模块 java_spi_demo_api ,再建接口类 HelloService
package com.deppon.service;
public interface HelloService {
String sayHello(String name);
}
3、新建子模块,实现类模块 java_spi_demo_impl , pom 文件中引入 子接口模块 java_spi_demo_api,新建实现类 HelloServiceImpl
import com.deppon.service.HelloService;
public class HelloServiceImpl implements HelloService{
@Override
public String sayHello(String name) {
return "你好 " + name;
}
}
如何读取实现类:1、在 resources 下面新建文件夹(名称固定) META-INF/services
2、再新建文件名(接口全路径作为文件名 com.deppon.service.HelloService)
3、文件中内容是实现类全路径:com.deppon.impl.HelloServiceImpl
4、新建子模块 java-spi-demo-main ,pom 文件引入 接口类 和 实现类
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>java_spi_demo_api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>java_spi_demo_impl</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
启动类编写:
public class HelloServiceMain {
public static void main(String[] args) {
final ServiceLoader<HelloService> helloServices = ServiceLoader.load(HelloService.class);
for (HelloService helloService : helloServices) {
System.out.println(helloService.getClass().getName() + ":" + helloService.sayHello("tom"));
}
}
}