# java-spi-demo **Repository Path**: liukunc9/java-spi-demo ## Basic Information - **Project Name**: java-spi-demo - **Description**: java spi示例项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-04-24 - **Last Updated**: 2022-04-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java-spi ## 实现方式 - 1、在spi-operate-service模块中定义接口 ```java package org.lewis.service; public interface NumOperate { int exec(int num1, int num2); } ``` - 2、在spi-operate-add模块中实现接口 - 2.1、实现接口 ```java public class NumAddOperate implements NumOperate { @Override public int exec(int num1, int num2) { return num1 + num2; } } ``` - 2.2、在src/main/resources 中新增 META-INF/services 目录, 并且新增一个文件,文件名为第1步接口的全路径名(即org.lewis.service.NumOperate), 文件内容如下: ```text org.lewis.service.impl.NumAddOperate ``` - 3、在spi-operate-multiplication模块中实现接口 > 这里的步骤和第2步一样,不再赘述 - 4、消费,在spi-operate-consumer中使用服务 - 4.1、在pom中引入接口的依赖,并引入自己想要的服务提供者以来 如: ```xml org.lewis spi-operate-service org.lewis spi-operate-multiplication ``` - 4.2、通过java.util.ServiceLoader使用 ```java public class App { public static void main(String[] args) { ServiceLoader loader = ServiceLoader.load(NumOperate.class); Iterator iterator = loader.iterator(); if (iterator.hasNext()) { NumOperate numOperate = iterator.next(); System.out.println(numOperate.exec(1, 2)); } else { throw new RuntimeException("classpath 中未找到服务org.lewis.service.NumOperate实现类"); } } } ```