码迷,mamicode.com
首页 > 编程语言 > 详细

Java SPI 实例

时间:2019-01-25 15:10:58      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:查看   java   方法调用   结果   特性   main方法   port   util   info   

SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。

这里简单写一个例子示意

创建DemoService接口 如下

 1 package com.demo;
 2 
 3 /**
 4  * @author chaixg
 5  * 2019/1/25
 6  */
 7 public interface DemoService {
 8 
 9     void sayHello();
10 
11 }

创建两个实现类如下

Demo1Service
 1 package com.demo;
 2 
 3 /**
 4  * @author chaixg
 5  * 2019/1/25
 6  */
 7 public class Demo1Service implements DemoService {
 8 
 9     @Override
10     public void sayHello() {
11         System.out.println("hello  I am Demo1Service");
12     }
13 }

 

Demo2Service

 1 package com.demo;
 2 
 3 /**
 4  * @author chaixg
 5  * 2019/1/25
 6  */
 7 public class Demo2Service implements DemoService {
 8 
 9     @Override
10     public void sayHello() {
11         System.out.println("hello  I am Demo2Service");
12     }
13 }

 

java SPI 读取 META-INF/services/{接口名} 此目录 创建com.demo.DemoService文件,写上实现类 如下

1 com.demo.Demo1Service
2 com.demo.Demo2Service

 

创建测试类Main方法调用

 1 package com.demo;
 2 
 3 import java.util.ServiceLoader;
 4 
 5 /**
 6  * @author chaixg
 7  * 2019/1/25
 8  */
 9 public class Demo {
10 
11     public static void main(String[] args) {
12 
13         ServiceLoader.load(DemoService.class).forEach(DemoService::sayHello);
14     }
15 }

执行结果如下

技术分享图片

 

 在文件中写上哪些实现类 这里就会获取到哪些实现类的实例 

我们就可以利用JDK提供的这一功能特性来做到动态给接口替换实现类 dubbo框架就利用了这一特性作为框架基础 不过Dubbo 并未使用 Java SPI,而是重新实现了一套功能更强的 SPI 机制。有兴趣者可以查看dubbo的实现

 

over...

 

Java SPI 实例

标签:查看   java   方法调用   结果   特性   main方法   port   util   info   

原文地址:https://www.cnblogs.com/jasonChai/p/10319292.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!