类加载器:ServiceLoader简述

转载 2018年04月17日 13:32:50
  1. e();  
  2. }  
(2)具体服务实现1:HDFSService

[java] view plain copy
  1. package com.impl;  
  2.   
  3. import com.service.IService;  
  4.   
  5. public class HDFSService implements IService {  
  6.   
  7.     @Override  
  8.   
  9.     public String sayHello() {  
  10.   
  11.         return "Hello HDFSService";  
  12.   
  13.     }  
  14.   
  15.     @Override  
  16.   
  17.     public String getScheme() {  
  18.   
  19.         return "hdfs";  
  20.   
  21.     }  
  22. }  
(3)具体服务实现2:LocalService

[java] view plain copy
  1. package com.impl;  
  2.   
  3. import com.service.IService;  
  4.   
  5. public class LocalService  implements IService {  
  6.   
  7.     @Override  
  8.   
  9.     public String sayHello() {  
  10.   
  11.         return "Hello LocalService";  
  12.   
  13.     }  
  14.   
  15.     @Override  
  16.   
  17.     public String getScheme() {  
  18.   
  19.         return "local";  
  20.   
  21.     }  
  22. }  
(4)配置:META-INF/services/com.service.IService

[java] view plain copy
  1. com.impl.HDFSService  
  2. com.impl.LocalService  
(5)测试类

[java] view plain copy
  1. package com.test;  
  2.   
  3. import java.util.ServiceLoader;  
  4.   
  5. import com.service.IService;  
  6.   
  7. public class Test {  
  8.   
  9.     public static void main(String[] args) {  
  10.   
  11.         ServiceLoader<IService> serviceLoader  = ServiceLoader.load(IService.class);  
  12.   
  13.         for (IService service : serviceLoader) {  
  14.   
  15.             System.out.println(service.getScheme()+"="+service.sayHello());  
  16.   
  17.         }  
  18.   
  19.     }  
  20. }  

结果:

hdfs=Hello HDFSService
local=Hello LocalService

可以看到ServiceLoader可以根据IService把定义的两个实现类找出来,返回一个ServiceLoader的实现,而ServiceLoader实现了Iterable接口,所以可以通过ServiceLoader来遍历所有在配置文件中定义的类的实例

ServiceLoader服务提供者模式,实现动态插件加载,类责任链模式

Edit ServiceLoader服务提供者模式,实现动态插件加载,类责任链模式 ServiceLoader的功能比ClassLoader简单,它可以帮我们获取所有实现了某接口或基类...
  • wsscy2004
  • wsscy2004
  • 2014-12-04 14:21:24
  • 2443

ServiceLoader实现原理

在java中根据一个子类获取其父类或接口信息非常方便,但是根据一个接口获取该接口的所有实现类却没那么容易。 有一种比较笨的办法就是classpath所有的class与jar包中的class,然后用Cl...
  • is_zhoufeng
  • is_zhoufeng
  • 2016-02-23 14:18:02
  • 5354

Java的类加载器简述

类加载器是java设计中一项创新,独立于JVM之外,类如何加载可以由JVM外部实现。如早期的Applets,曾经大红的OSGI等。 类加载器就是加载类的。一个jvm中可以存在若干个类加载器。相同...
  • wf1982
  • wf1982
  • 2013-08-31 12:18:49
  • 6247

ServiceLoader的使用

发现ServiceLoader是个类似spring的东西,可以指定接口和实现,通过ServiceLoader去载入。  下面是我的一个例子:  Java代码   package com.te...
  • z69183787
  • z69183787
  • 2016-05-04 06:34:03
  • 1041

类加载器简述

java虚拟机中可以安装多个类加载器,系统默认三个主要的类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader。 类加载器也是java类,...
  • daochuwenziyao
  • daochuwenziyao
  • 2017-08-29 23:51:50
  • 201

ServiceLoader

可扩展 应用程序是指无需修改原有代码基础就可轻易扩展的应用程序。可以通过新插件或模块来增强其功能。开发人员,软件供应商,甚至客户只要在应用程序的类路径或特定于应用程序的扩展目录中添加一个新的 Java...
  • alex197963
  • alex197963
  • 2013-12-20 11:35:23
  • 1622

Java 一个特殊的类 ServiceLoader<S> 详解

ServiceLoader与ClassLoader是Java中2个即相互区别又相互联系的加载器.JVM利用ClassLoader将类载入内存,这是一个类声明周期的第一步(一个java类的完整的生命周期...
  • majian_1987
  • majian_1987
  • 2016-04-28 15:36:16
  • 532

ServiceLoader原理解析

最近在公司的项目里看到了ServiceLoader这个类,就好奇地去了解了一下。我们都知道,根据一个类去找它的父类或者接口那很简单。毕竟类加载的时候,相关信息都加载进去了。但反过来就不简单了,那就是根...
  • JobsandCzj
  • JobsandCzj
  • 2017-07-11 16:58:50
  • 647

java.util.ServiceLoader源码分析

java.util.ServiceLoader源码分析 回顾: ServiceLoader类的使用(具体参考博客http://blog.csdn.net/liangyihuai/article/d...
  • liangyihuai
  • liangyihuai
  • 2016-02-22 14:39:29
  • 1168

ServiceLoader跟DriverManager使用总结

http://www.myexception.cn/program/1355384.html
  • hintcnuie
  • hintcnuie
  • 2014-07-18 09:36:27
  • 4343
收藏助手
不良信息举报
您举报文章:类加载器:ServiceLoader简述
举报原因:
原因补充:

(最多只允许输入30个字)