Java service provider-lookup mechanism(发现机制)-1
public interface CacheLookup { public String naming(); public Object get(); public void add(Object cache); public void remove(Object cache); }
public class DefaultCacheLookup implements CacheLookup { private List<Object> cached; private Object defaultCache; public DefaultCacheLookup() { cached = new ArrayList<Object>(); } public String naming() { return "default cache lookup provider"; } @Override public Object get() { int size = cached.size(); if (size < 1) { return defaultCache; } Random random = new Random(System.currentTimeMillis()); return cached.get(random.nextInt(size)); } @Override public void add(Object cache) { cached.add(cache); } @Override public void remove(Object cache) { cached.remove(cache); } }
public class AdvancedCacheLookup implements CacheLookup { private List<Object> cached; private Object defaultCache; public AdvancedCacheLookup() { cached = new ArrayList<Object>(); } public String naming() { return "advanced cache lookup provider"; } @Override public Object get() { int size = cached.size(); if (size < 1) { return defaultCache; } Random random = new Random(System.currentTimeMillis()); return cached.get(random.nextInt(size)); } @Override public void add(Object cache) { cached.add(cache); } @Override public void remove(Object cache) { cached.remove(cache); } }
classpath下META-INF\services\com.xxx.ddal.CacheLookup:
com.xxx.ddal.DefaultCacheLookup com.xxx.ddal.AdvancedCacheLookup
@Test public void test() { Iterator<CacheLookup> interator = Service.providers(CacheLookup.class); while (interator.hasNext()) { CacheLookup lookup = interator.next(); System.out.println(lookup.getClass()); System.out.println(lookup.naming()); } }
class com.xxx.ddal.DefaultCacheLookup
default cache lookup provider
class com.xxx.ddal.AdvancedCacheLookup
advanced cache lookup provider
1、http://docs.oracle.com/javase/1.4.2/docs/guide/jar/jar.html#Service%20Provider
2、http://docs.oracle.com/javase/1.5.0/docs/guide/jar/jar.html#Service%20Provider
3、http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html
Java service provider-lookup mechanism(发现机制)-2
public interface Coherence { public String naming(); }
public class DefaultCoherence implements Coherence { public String naming() { return "default coherence protocol"; } }
public class Jobs implements Coherence { public String naming() { return "jobs coherence protocol"; } }
classpath下META-INF\services\com.xxx.ddal.coherence.Coherence 写道
com.xxx.ddal.coherence.DefaultCoherence
com.xxx.ddal.coherence.Jobs
com.xxx.ddal.coherence.Jobs
@Test public void test() { ServiceLoader<Coherence> serviceLoader = ServiceLoader.load(Coherence.class); for (Coherence coherence : serviceLoader) { System.out.println(coherence.getClass()); System.out.println(coherence.naming()); } }
输出 写道
class com.xxx.ddal.coherence.DefaultCoherence
default coherence protocol
class com.xxx.ddal.coherence.Jobs
jobs coherence protocol
default coherence protocol
class com.xxx.ddal.coherence.Jobs
jobs coherence protocol
@Test public void test() { // String cn = "com.sun.xml.internal.ws.api.message.saaj.SAAJFactory"; String cn = "javax.print.PrintServiceLookup"; Class<?> clazz = null; try { clazz = Class.forName(cn); } catch (ClassNotFoundException e) { Assert.fail("Class not found: " + cn); } ServiceLoader<?> serviceLoader = ServiceLoader.load(clazz); for (Object obj : serviceLoader) { System.out.println(obj.getClass()); } }
输出 写道
class sun.print.Win32PrintServiceLookup
public class ProviderService extends Provider { static private final String DEFAULT_JAXWSPROVIDER = "com.sun.xml.internal.ws.spi.ProviderImpl"; private Provider wrapper; public ProviderService() { Class<?> klass = null; try { klass = Class.forName(DEFAULT_JAXWSPROVIDER); wrapper = (Provider) klass.newInstance(); } catch (Exception e) { throw new WebServiceException("Provider " + DEFAULT_JAXWSPROVIDER + " error: " + e.getMessage(), e); } } @Override public ServiceDelegate createServiceDelegate(URL wsdlDocumentLocation, QName serviceName, Class serviceClass) { return wrapper.createServiceDelegate(wsdlDocumentLocation, serviceName, serviceClass); } @Override public Endpoint createEndpoint(String bindingId, Object implementor) { return wrapper.createEndpoint(bindingId, implementor); } @Override public Endpoint createAndPublishEndpoint(String address, Object implementor) { return wrapper.createAndPublishEndpoint(address, implementor); } @Override public EndpointReference readEndpointReference(Source eprInfoset) { return wrapper.readEndpointReference(eprInfoset); } @Override public <T> T getPort(EndpointReference endpointReference, Class<T> serviceEndpointInterface, WebServiceFeature... features) { return wrapper.getPort(endpointReference, serviceEndpointInterface, features); } @Override public W3CEndpointReference createW3CEndpointReference(String address, QName serviceName, QName portName, List<Element> metadata, String wsdlDocumentLocation, List<Element> referenceParameters) { return wrapper.createW3CEndpointReference(address, serviceName, portName, metadata, wsdlDocumentLocation, referenceParameters); } }
META-INF\services\javax.xml.ws.spi.Provider 写道
com.javax.jws.distributed.ProviderService
Provider provider = Provider.provider(); // ProviderService
相关推荐
rapidsh-SSH经典整合框架-包括权限管理-文件上传下载-用户管理-分页-lookup
Java Methods-Lookup Tables and Hashing.ppt
用例用例包括:将devicons放在目录中的文件之前ls | devicon-lookup --color向grep结果添加图标rg test | devicon-lookup --prefix :大型结果集的流式结果rg str --color always | devicon-lookup -c -p : | fzf --...
前端开源库-nsq-lookup-jcnsq lookup jc,通过nsqlookupd查找nsqd实例
文件系统原生文档path-lookup翻译
通过使用以下方法将conda-forge添加到您的通道中,可以从conda-forge通道安装nested-lookup : conda config --add channels conda-forge 启用conda-forge频道后,可以使用以下命令安装nested-lookup : conda ...
ip domain-lookup命令解释 与 实例 2500#
iso-countries-lookup 使用输入的基本容错能力的多种语言按国家/地区名称查找国家/地区代码(ISO 3166-1 alpha-2)。 返回给定国家/地区名称的ISO 3166-1 alpha-2国家/地区代码。 支持基于以及基于备用名称。 安装...
资源来自pypi官网。 资源全名:digdeo-syspass-ansible-lookup-0.2.4.tar.gz
资源来自pypi官网。 资源全名:drf-multi-lookup-0.0.14.tar.gz
资源来自pypi官网。 资源全名:drf-multi-lookup-0.0.19.tar.gz
资源分类:Python库 所属语言:Python 资源全名:digdeo-syspass-ansible-lookup-0.1.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Ajax-ip-lookup.zip,IP地理定位找到您想要的,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的情况下更改。
用法使用npm install -g sourcemap-lookup ,然后运行sourcemap-lookup -h了解详细用法。 Usage: sourcemap-lookup <path>:<line>:<column> [options]Path to map file may include the .map or it will be assumed ...
支持的代码: FIPS 10-4码(2位) ISO 3166(2位数字) ISO 3166(3位数字) ISO 3166(数字) 互联网代码安装$ npm install country-code-lookup用法const lookup = require ( 'country-code-lookup' )// search ...
用友手册资料:ECA-LOOKUP DATA手册.pdf
资源分类:Python库 所属语言:Python 资源全名:pubmed-lookup-0.1.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
办公自动化WPS 2019 基础课程wps表格-LOOKUP函数.mp4
geojson-geometries-lookup :high_voltage: 大型GeoJSON的几何查找中的快速几何。 编码为 :red_heart: 作者西蒙妮·普里马罗萨( Simone Primarosa) 。 概要使用此包,您可以在给定的GeoJSON上执行以下操作(以及更...
Multi-Lookup Table FPGA Implementation of an Adaptive Digital Predistorter for Linearizing RF Power Amplifiers With Memory Effects