JAVA基础-SPI
1,什么是SPI
SPI全名Service Provider interface,翻译过来就是“服务提供接口”,再说简单就是提供某一个服务的接口, 提供给服务开发者或者服务生产商来进行实现。
Java SPI 是JDK内置的一种动态加载扩展点的实现。
这个机制在一般的业务代码中很少用到(个人接触到的业务没有用到过),但是再底层框架中却被大量使用,包括JDBC、Dubbo、Spring框架、日志接口中都有用到,不同的是有的使用Java原生的实现,有的框架则自己实现了一套SPI机制。
2,SPI 简单实现
接口
package com.demo.base.spi; public interface Animal { void eat(); }
几个实现类
package com.demo.base.spi; public class Cat implements Animal { @Override public void eat() { System.out.println("老猫也爱吃饭"); } } package com.demo.base.spi; public class Dog implements Animal { @Override public void eat() { System.out.println("狗子爱干饭"); } } package com.demo.base.spi; public class Pig implements Animal { @Override public void eat() { System.out.println("猪吃的最多"); } }
测试类
package com.demo.base.spi; import java.util.Iterator; import java.util.ServiceLoader; public class SpiDemo { public static void main(String[] args) { ServiceLoader<Animal> animals = ServiceLoader.load(Animal.class); Iterator<Animal> iterator = animals.iterator(); while (iterator.hasNext()){ iterator.next().eat(); } } }
/META-INF/services 下定一个文件,文件名与接口权限全限定名一致,文件内容就是要发现的实体类全限定名
com.demo.base.spi.Animal
com.demo.base.spi.Cat com.demo.base.spi.Dog com.demo.base.spi.Pig
本文作者:Hi.PrimaryC
本文链接:https://www.cnblogs.com/cnff/p/17534704.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步