Java之ServiceLoader】的更多相关文章

在很多开源组件里经常会看到java.util.ServiceLoader的使用,这里给大家介绍下怎么通过ServiceLoader找到一个接口的所有实现类. 我们新建一个接口Hello public interface Hello { String say(); } 然后创建一个实现类DefaultHello public class DefaultHello implements Hello { @Override public String say() { return "Default H…
近期在项目中需要实现能在配置文件中定义多个统一接口类型的类,可以在程序中获取到所有配置的类,刚开始打算配置到properties中,然后去程序读取,感觉这种方式不太灵活,于是,研究研究java中有没有这种支持,最终确认ServiceLoader可以实现这种功能,下面讲解如何使用ServiceLoader类. 首先定义一个接口程序的定义如下: public interface IShareniuService { public String sayHello(); public String ge…
转载请注明源出处:http://www.cnblogs.com/lighten/p/6946683.html 1.简介 JDK1.6之后,java.util包下多了一个类ServiceLoader,其实现了Iterable接口(可以直接进行for-each loop).这个类的主要作用是提供了一种服务发现机制,并没有什么深奥的内容.实现过程也十分简单,下面通过一个例子来详细讲解一下如何使用和其实现过程.本文基于jdk1.8. 2.例子 ServiceLoader的使用是要在根目录有一个文件夹ME…
ServiceLoader主要的功能是用来完成对SPI的provider的加载. 先看下它的成员: public final class ServiceLoader<S> implements Iterable<S> { private static final String PREFIX = "META-INF/services/"; // The class or interface representing the service being loaded…
1. 几个不错的关于ServiceLoader的文章,大家可以先参考一下 1) http://www.myexception.cn/program/1355384.html 这篇的后面的问题分析不错 2) http://singleant.iteye.com/blog/1497259 2.实例代码 直接上代码吧 1) 接口 package com.ctrip.lzyan.test.element.serviceloader.sample1; public interface Command {…
转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问题来解释: 实现: 其实具体的实现类就是java.util.ServiceLoader这个类. 要想了解一个机制的原理,首先得知道它是怎么运行的,需要什么配置,才能运行起来.然后再分解来了解实现.对于技术实现也是一样,先看这个类是怎么实现的,先让它跑起来,看到效果.然后再讲原理.按照使用说明文档,应…
一.背景 SPI,全称Service Provider Interfaces,服务提供接口.是Java提供的一套供第三方实现或扩展使用的技术体系.主要通过解耦服务具体实现以及服务使用,使得程序的可扩展性大大增强,甚至可插拔. 基于服务的注册与发现机制,服务提供者向系统注册服务,服务使用者通过查找发现服务,可以达到服务的提供与使用的分离,甚至完成对服务的管理. JDK中,基于SPI的思想,提供了默认具体的实现,ServiceLoader.利用JDK自带的ServiceLoader,可以轻松实现面向…
源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的.比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddress.getByName( "blog.arganzheng.me" ).getHostAddress(); 或者反过来IP对应域名: InetAddress[] addresses = InetAddress.getAllByName("8.8.8.8"); // i…
1 SPI机制简介 SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoader的文档里有比较详细的介绍.简单的总结下java spi机制的思想.我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块.jdbc模块的方案等.面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码.一旦代码里涉及具体的实现类,就违反了可拔插的原则…
JAVA流程控制 example1: --输出九九乘法表 public class chengfabiao { public static void main (String[] args){                                          int i = 1;                                          int j = 1;                                          for(i<=9…