温故而知新,一年前写过一篇此内容的文章,貌似已经遗失。
一个服务(service)通常指的是已知的接口或者抽象类,服务提供方就是对这个接口或者抽象类的实现,然后按spi标准存放到资源路径META-INF/services目录下,文件的命名为该服务接口的全限定名。
如果一个接口com.github.yingzhuo.api.SomeService其实现类为com.github.yingzhuo.spi.SomeServiceProvider,
那此时需要在META-INF/services中放置文件com.github.yingzhuo.api.SomeService,其中的内容就为该实现类的全限定名com.github.yingzhuo.spi.SomeServiceProvider,
有多个服务实现,每一行写一个服务实现,#后面的内容为注释,并且该文件只能够是以UTF-8编码。
接口
package com.github.yingzhuo.api;
public interface SomeService {
public String getMessage();
}
顶层工厂类
package com.github.yingzhuo.api;
import java.util.Iterator;
import sun.misc.Service;
@SuppressWarnings("rawtypes")
public class SomeServiceFactory {
private SomeServiceFactory() {
}
public static SomeService getSomeServiceInstance() {
Iterator it = Service.providers(SomeService.class);
if (it.hasNext()) {
return (SomeService) it.next();
} else {
return null;
}
}
}
实现类
package com.github.yingzhuo.spi;
import com.github.yingzhuo.api.SomeService;
public class SomeServiceProvider implements SomeService {
public String getMessage() {
return getClass().getName();
}
}
分享到:
相关推荐
PCI Bus Power Management Iterface Specification Revision 1.1. describes the basic specification requirements for PCI bus.
创建一个实现Processor Iterface的新类。 在process()函数中添加逻辑。 将流程添加到服务类的流程列表中。 要创建新的Output类型,请实现OutputNode接口。 进程捆绑在Service类中。 执行jar文件时将执行服务列表...
iterface 接口 接口以I开头,后面以单词来重命名。 例如IComputer 接口不允许使用访问修饰符 pulbic private protected 接口不可以使用修饰符 abstract virtual override static 接口不能定义字段和不能定义...
LibThriftClient 一个小,轻便,简单的节俭客户端库,用于java,android等。 谁需要它 人们使用协议,这是RCP的选择。... } ...``` 您可以像这样编写Iterface和JavaBean: public interface MyService
条码技术最早产生在二十世纪二十年代的美国,在1970年Iterface Mechanisms公司开发出“二维码”之后,才有了价格适于销售的二维矩阵条码的打印和识读设备。此后不久,随着LED(发光二极管)、微处理器和激光二极管的...
动态休息客户端 一个简单的 REST 客户端。 使用动力学。... 您可以为这个 api 编写一个客户端,如下所示: // New up... ImpromptuInterface 可以让你做到这一点: // create an iterface to make it place nice againpubl
该目录包括'gui'子目录下的图形用户Iterface(在PyQt中开发),以及位于'FlexEMG_21Class_HDC'的固件(FPGA设计和ARM Cortex M3代码)。 数据分析 从“ data_analysis / realtime_data”目录中的实时实验收集的数据...
文件还原 该组件是官方Home ... 然后使用用户iterface设置实体。 注意:旧的手动方法仍然可用。 设置示例 在下面的示例中,设置了传感器和要配置的参数。 sensor : - platform : file_restore unit_of_meas
gib是一个Gnome用户博客,旨在简化您自己的博客的管理。 该项目包括2个部分: Gnome用户Iterface = pyGtk + libglade 和php博客基于css,php和mysql。 PD:我的英语不好:D
具有AMBA APB Iterface的DUT 具有AMBA AXI4-Lite接口的DUT 样本测试用例 该测试平台包括三个调用预定义测试序列的示例测试用例。 测试名称 测试顺序 ral_hw_reset_test ral_bit_bash_test ral_access_test ...
ami-Asterisk Manager Iterface(AMI)到网络套接字代理介绍amiws是从AMI到WEB的简单代理。 它可以通过AMI(Asterisk Manager界面)连接到一个或多个Asterisk PBX,从AMI流中读取消息并向其发送操作/命令。 解析接收...
费用计算器一种简单的解决方案,用于计算符合给定Iterface的消息的总成本。 有关此实现,请参见TotalCostCalculator 。 该解决方案包含在单元测试项目中,以简化运行,并且可以在TotalCostCalculatorTests中找到测试...