我是靠谱客的博主 虚心灯泡,最近开发中收集的这篇文章主要介绍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();
}
}
最后
以上就是虚心灯泡为你收集整理的Service Provider Iterface (SPI) 和 sun.misc.Service的全部内容,希望文章能够帮你解决Service Provider Iterface (SPI) 和 sun.misc.Service所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复