Service Provider Iterface (SPI) 和 sun.misc.Service

温故而知新,一年前写过一篇此内容的文章,貌似已经遗失。
[img]http://dl.iteye.com/upload/picture/pic/126805/9c419077-ce9d-3a52-8d65-ff49f25908e0.png[/img]

一个服务(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();
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值