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
相关推荐
Name/address lookup uses domain service Name servers are 192.168.0.23 Host Flags Age Type Address(es) 2501B (perm, OK) 0 IP 172.16.10.2 1900S.noko.com (temp, OK) 0 IP 192.168.0.32 ``` 以上信息显示了...
综上所述,"rapidsh-SSH经典整合框架-包括权限管理-文件上传下载-用户管理-分页-lookup"是一个集成了上述技术的项目实例,它提供了一个完整的开发模板,可以帮助开发者快速搭建起具备上述功能的Web应用。通过学习和...
标题中的"PyPI 官网下载 | drf-multi-lookup-0.0.14.tar.gz"表明这是一个从Python Package Index (PyPI)官方下载的软件包,名为`drf-multi-lookup`,版本为0.0.14,且以tar.gz格式压缩。这个包可能是针对Python...
《PyPI上的drf-multi-lookup-0.0.19.tar.gz:Python库与分布式系统集成解析》 在IT领域,Python作为一种强大且灵活的编程语言,被广泛应用于各种项目,尤其是Web开发。PyPI(Python Package Index)是Python开发者...
【nsq-lookup-jc】是一个专为前端开发者设计的开源库,主要用于与nsqlookupd服务进行交互,帮助开发者方便地查找并连接到nsqd节点。nsq是一款由Golang编写的高可用、高性能的消息队列系统,常用于实时处理大规模数据...
Java 方法lookup表和哈希表 Java 方法是一种面向对象的编程语言,广泛应用于安卓应用开发、Web 开发、企业软件开发等领域。在 Java 编程中,lookup 表和哈希表是两种常用的数据结构,用于快速存储和检索数据。 ...
用例用例包括:将devicons放在目录中的文件之前ls | devicon-lookup --color向grep结果添加图标rg test | devicon-lookup --prefix :大型结果集的流式结果rg str --color always | devicon-lookup -c -p : | fzf --...
文件系统原生文档path-lookup翻译
标题中的"PyPI 官网下载 | digdeo-syspass-ansible-lookup-0.2.4.tar.gz"指的是在Python Package Index (PyPI) 官网上可以找到的一个开源项目,名为`digdeo-syspass-ansible-lookup`。这个项目版本号为0.2.4,被打包...
通过使用以下方法将conda-forge添加到您的通道中,可以从conda-forge通道安装nested-lookup : conda config --add channels conda-forge 启用conda-forge频道后,可以使用以下命令安装nested-lookup : conda ...
iso-countries-lookup 使用输入的基本容错能力的多种语言按国家/地区名称查找国家/地区代码(ISO 3166-1 alpha-2)。 返回给定国家/地区名称的ISO 3166-1 alpha-2国家/地区代码。 支持基于以及基于备用名称。 安装...
资源分类:Python库 所属语言:Python 资源全名:digdeo-syspass-ansible-lookup-0.1.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
春天jndi查找 如何使用Spring从JNDI查找数据源 Server.xml <... maxActive="100" maxIdle="20" minIdle="5" ...jee:jndi-lookup id =“ dataSource” jndi-name =“ jdbc / javatechie” Expected
web服务器缓存实现原理,通过chrome f12观察web服务器缓存 后台action命中缓存hit Via X-cache X-Cache-Lookup
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 ...
资源分类:Python库 所属语言:Python 资源全名:pubmed-lookup-0.1.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
办公自动化WPS 2019 基础课程wps表格-LOOKUP函数.mp4
"spacy-lookup" 是一个针对自然语言处理(NLP)的扩展库,专门用于实现基于字典的命名实体识别(NER)。在自然语言处理领域,命名实体识别是一项重要的任务,它涉及到从文本中识别出具有特定意义的实体,如人名、...