简述Java的SPI技术
2023-09-11 14:22:24 时间
人狠话不多,先上截图和代码吧。
这是工程目录。看到resources目录下面没有,添加了META-INF和services目录。
添加了一个com.gys.test.IAnimal文件。这个文件名和上面的接口名完全对应。这个目录的文件名是有讲究的,按照SPI规范来的。
上代码:
package com.gys.test; public interface IAnimal { void eat(); }
package com.gys.test.impl; import com.gys.test.IAnimal; public class Bird implements IAnimal { @Override public void eat() { System.out.println("小鸟吃虫子"); } }
package com.gys.test.impl; import com.gys.test.IAnimal; public class Dog implements IAnimal { @Override public void eat() { //System.out.println("小狗吃屎"); System.out.println("小狗吃骨头"); } }
package com.gys.test; import java.util.ServiceLoader; public class MainTest { public static void main(String[] args) { ServiceLoader<IAnimal> animals=ServiceLoader.load(IAnimal.class); for (IAnimal animal:animals){ animal.eat(); } } }
源码一角说明META-INF/service:
ServiceLoader.load(clsss)就是去ClassPath的MEAT-INF的service下去寻找指定文件;这里的classPath包括外部引入的jar包中的classPath.
如果我们引入了第三方的jar包,如果jar中的META-INF/service有com.gys.test.IAnimal文件,也会被读取,并且实例化里面的类。
SPI使用场景:
自己提供接口让别人提供实现的方式;典型的如JDBC模式。
相关文章
- JAVA学习(一):Java介绍及其平台、开发环境的配置与搭建
- java实现第三届蓝桥杯排日程
- 【JAVA秒会技术之秒杀面试官】秒杀Java面试官——集合篇(一)
- Java职业生涯规划
- 【JAVA】java中split以"." 、""、“|”分隔字符串
- 【JAVA】Java 异常中e的getMessage()和toString()方法的异同
- [Linux] Install java and add JAVA_HOME, PATH
- 【JAVA】基于MVC架构Java技术荟萃案例演练
- Java核心知识点学习----线程同步工具类,CyclicBarrier学习
- 【JAVA】java中split以"." 、""、“|”分隔字符串
- Oracle要对Java收费了,SAP基于Java技术栈的那些产品的客户怎么办
- Atitit. 。Jna技术与 解决 java.lang.Error: Invalid memory access
- Atitit.java的浏览器插件技术 Applet japplet attilax总结
- atitit.技术选型方法总结为什么java就是比.net有前途
- 阿里中间件技术专家魏鹏:基于Java容器的多应用部署技术实践
- 【java】Java 包(package)
- Java八大基本数据类型
- java 图片操作技术之RGB的获取
- 一文详解java线程池 详解Java线程池的七个参数 详解池化技术 java如何选择核心线程数 详解Java线程池的拒绝策略
- Java开发技术之成为高级java工程师必须学习的三个技术
- JSP隐式对象是JSP容器为每个页面提供的Java对象
- 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )
- 基于JAVA实现的WEB端UI自动化 - WebDriver高级篇 - cookie操作
- 基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - ant使用 - ant调用email 自动发送邮件