不做知识的搬运工,坚持原创,阅读更多文章,欢迎订阅微信公众号:深夜程猿
概述
对于Java SPI会分为两篇文章来介绍,第一篇文章会简单介绍如何实现一个Java SPI Demo学习,第二篇文章会从JDK源码角度来分析Java SPI实现原理
什么是Java SPI
SPI的全称是Service Provider Interface,是JDK内置的一种服务发现机制。通过SPI我们可以动态加载我们定义的服务实现类。
Demo展示
定义一个接口
package com.spi;public interface ISpi { void say();}复制代码
编写两个实现类
package com.spi;public class FirstSpiImpl implements ISpi { @Override public void say() { System.out.println("我是第一个SPI实现类"); }}复制代码
package com.spi;public class SecondSpiImpl implements ISpi { @Override public void say() { System.out.println("我是第二个SPI实现类"); }}复制代码
编写配置文件
在src根目录创建文件夹META-INF/services,在创建的文件夹下面创建一个文件,命名为SPI接口的全路径名,并写上需要动态加载的实现类的全路径名:
com.spi.FirstSpiImplcom.spi.SecondSpiImpl复制代码
编写运行程序
package com.spi;import java.util.ServiceLoader;/** * Hello world! */public class App { public static void main(String[] args) { ServiceLoaderserviceLoader = ServiceLoader.load(ISpi.class); for (ISpi service : serviceLoader) { service.say(); } }}复制代码
输出内容为
我是第一个SPI实现类 我是第二个SPI实现类
读者可以随意增删配置内容,查看具体输出。
文件结构图
关于SPI入门学习只需要看到这就可以来,下一篇文章会从JDK源码角度来详细分析SPI原理,敬请关注~~